我在 Postgres 中有一个表 X,其中包含以下条目
A B C
2 3 1
3 3 1
0 4 1
1 4 1
2 4 1
3 4 1
0 5 1
1 5 1
2 5 1
3 5 1
0 2 2
1 2 3
我想为每种 A 和 B 找出具有最大 C 列的条目,即(按 B 分组)具有最有效的查询并返回相应的 A 和 B。
预期输出:
A B C
1 2 3
2 3 1
0 4 1
0 5 1
请帮我解决这个问题。谢谢
最佳答案
使用 DISTINCT ON
:
SELECT DISTINCT ON (B)
A, B, C
FROM
my_table
ORDER BY B, C DESC, A
DISTINCT ON
为您提供有序组的第一行。在这种情况下,B
被分组。
B
排序后(这是必要的):我们首先将最大的C
(带有DESC
)排序到每个组的顶部。然后(如果有绑定(bind)的 MAX(C)
值)我们命令 A
使最小的 A
到达顶部。
关于SQL查询找到每种类型的最大计数对应的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53671922/