Group By仅适用于某些列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Group By仅适用于某些列相关的知识,希望对你有一定的参考价值。

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

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

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
另一答案

试试这个

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

以上是关于Group By仅适用于某些列的主要内容,如果未能解决你的问题,请参考以下文章

django - 仅适用于某些用户组的可访问 url 模式

MySQL GROUP BY,同时按列内容保留某些行

仅休眠错误:“列必须出现在 GROUP BY 子句中或在聚合函数中使用”

使用group by时如何计算列中的行数

我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?

从数组中删除重复值