SQL GROUP BY问题

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

Dam*_*ver 5

使用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()