sql按子组总和数据排序

标签 sql sorting group-by

如何排序

a 1 15
a 2 3
a 3 34
b 1 55
b 2 44
b 3 8

到(按第三列总和):

b 1 55
b 2 44
b 3 8
a 1 15
a 2 3
a 3 34

从 (55+44+8) > (15+3+34)

最佳答案

如果您使用的是 SQL Server/Oracle/Postgresql,您可以使用窗口化的 SUM:

SELECT *
FROM tab
ORDER BY SUM(col3) OVER(PARTITION BY col) DESC, col2

LiveDemo

输出:

╔═════╦══════╦══════╗
║ col ║ col2 ║ col3 ║
╠═════╬══════╬══════╣
║ b   ║    1 ║   55 ║
║ b   ║    2 ║   44 ║
║ b   ║    3 ║    8 ║
║ a   ║    1 ║   15 ║
║ a   ║    2 ║    3 ║
║ a   ║    3 ║   34 ║
╚═════╩══════╩══════╝

关于sql按子组总和数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35986246/

相关文章:

不支持 ODBC 或 MSSQL 的 PHP 到 SQL Server

Mysql更新和连接查询

Ruby:使用其中一个数组的值对 2 个数组进行排序

sorting - 如何将每个人(具有多个地址)的最短距离带到原点并对该值进行排序

r - 按包含元素列表的变量中的元素对数据框进行分组

sql - 年月不同等候名单上的客户数量

mysql - 更改sql查询输出中单元格的显示名称

sql - 删除重复项并求和

sql查询返回同一个表中没有重复记录的记录

c++ - 低功耗处理器的快速搜索-插入-删除算法