Group By仅适用于某些列

问题描述 投票:2回答:2

如何仅对选择查询中的某些顶部选定列进行分组?

我想到的一个错误但简单的答案是这段代码;

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

如果我尝试使用“按计数排序(*),品牌”,由于某种原因,我会按照计数值的降序来看待品牌。它只是订购品牌栏而不是品牌和数量

我也尝试在同一个表上进行左连接,这样我只需要在主表中分组,但那也不对,我提出的代码真的很混乱,所以我要把它留在这个主题之外。

sql group-by
2个回答
2
投票

您似乎想要按照每个品牌的最大数量和品牌第二的顺序进行订购。

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

0
投票

试试这个

select TOP 5  t1.* from (SELECT brand, name, delivered, count(*)as 'test'
From myTB
Where type = 'jeans'
Group By brand, name,delivered

)作为t1顺序由t1.test desc

© www.soinside.com 2019 - 2024. All rights reserved.