Get*_*ame 2 sql postgresql group-by
我有一张桌子:
id group data
1 a 10
2 a 20
3 b 10
4 b 20
我想获取具有按"组"分组的最大"数据"值的记录ID,即
id
2
4
使用CTE的更现代的答案:
;WITH Numbered as (
SELECT ID,ROW_NUMBER() OVER (PARTITION BY group ORDER BY data desc) rn FROM Table
)
SELECT ID from Numbered where rn=1
Run Code Online (Sandbox Code Playgroud)
PostgreSQL在线有一些相当不错的文档,看看窗口函数和WITH查询.在这种情况下,我们根据它们所属的组对表中的行进行分区.在每个分区中,我们根据数据列对行进行编号(行号1分配给最高数据值).
在外部查询中,我们只询问在其分区中分配了行号1的行,如果您遵循逻辑,则它必须是每个组中的最大数据值.
如果您需要处理关系(即,如果组中的多个行都具有该组的最大数据值,并且您希望两者都显示在结果集中),则可以切换ROW_NUMBER()到RANK()