首页 > 解决方案 > 按 2 列分组并计数,然后对每个密钥对的计数进行排序

问题描述

很可能这个问题已经得到解答,但我并没有真正找到解决方案:

我有这样的事情:

使用此查询:

SELECT
   deparment,
   device,
   count(*) as times 
FROM
   routines
GROUP BY
   device,
   deparment
ORDER BY
   times DESC;

The result would come like this:

3   "A" 7337
2   "A" 5875
1   "A" 3242
3   "B" 1937
2   "B" 1866
3   "C" 1609
1   "B" 1580
3   "D" 1493

但我想按每个设备排序,所以输出应该是这样的:

3   "A" 7337
2   "A" 5875
1   "A" 3242
3   "B" 1937
2   "B" 1866
1   "B" 1580
3   "C" 1609
3   "D" 1493

所以计数字段应该从多到少排序,但必须按每个设备分组

标签: mysqlsqlpostgresql

解决方案


我认为您需要两个排序键:

ORDER BY device, times DESC;

如果您也想对设备进行排序,因此最大的设备在前,您可以使用窗口函数:

ORDER BY sum(times) over (partition by device) DESC, device, times DESC

推荐阅读