sql - 仅对某些列进行分组

标签 sql 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

关于sql - 仅对某些列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090216/

相关文章:

MySQL Workbench - 数据库迁移(SQL Server -> MySQL)

mysql - 按时间排序,仅显示唯一的

mysql - 查找重复值

MySql::Group by where date time max

Python pandas 按类别分组占总数的百分比

mysql - 如何在 MYSQL 中按列值分隔这些分组数据?

sql - 帮助从 MySQL 查询获取或显示 ColdFusion 中的随机记录?

sql - 由具有不同 PK 的其他表引用的表

Mysql查询-按国家、地区划分的总和及占总数的百分比(一般)

mysql - 删除重复行并将删除的行值添加到保留的行