如何在我的选择查询中仅对部分顶部选定的列进行分组?
我想到的一个错误但简单的答案是这段代码;
SELECT TOP 5 brand, name, delivered, count(*)
From myTB
Where type = 'jeans'
Group By brand, name
Order By Count(*) DESC
我所追求的结果应该返回以下结果; (以上代码错误,返回错误)
Brand name Delivered Count
-------------------------------------
Levis 304 Slim 9/24 44
Croccer 500 Lose 3/14 22
Croccer 400 Botcut 4/7 14
Lee Botcut 33 5/5 16
Lee Slim 44 10/7 12
在上面的结果中,我将品牌一个接一个地放在一起,即使计数没有递减。
我已经尝试过了,最接近的是这段代码;
SELECT TOP 5 brand, name, delivered, count(*)
From myTB
Where type = 'jeans'
Group By brand, name, delivered
Order By Count(*) DESC
但是返回的数据是这样的;
Brand name Delivered Count
-------------------------------------
Levis 304 Slim 9/24 44
Croccer 500 Lose 3/14 22
Lee Botcut 33 5/5 16
Croccer 400 Botcut 4/7 14
Lee Slim 44 10/7 12
如果我尝试使用“按计数(*)、品牌排序”,出于某种原因,我会得到按降序排列的品牌,无论计数值如何。看起来它只对品牌列进行排序,而不是同时对品牌和计数进行排序
我还尝试在同一个表上进行左连接,这样我只需要在主表中进行分组,但这也不正确,而且我想出的代码真的很困惑,所以我要离开它在此线程之外。
最佳答案
您似乎想首先按每个品牌的最大数量进行排序,然后再按品牌进行排序。
select top 5 t1.* from (
select brand, name, delivered, count(*)
from myTB
where type = 'jeans'
group by brand, name, delivered
) t1 join (
select brand, cnt
from (
select brand, cnt,
row_number() over (partition by brand order by cnt desc) rn
from (select brand, count(*) cnt from myTB group by brand, name, delivered) t1
) t1
where rn = 1
) t2 on t1.brand = t2.brand
order by t2.cnt desc, t2.brand
关于sql - 仅对某些列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090216/