如果之前已经回答过,请道歉。
假设我有下表:
colA | colB | colC
-----|------|-----
a | 1 | 9
a | 2 | 8
b | 1 | 4
b | 2 | 3
b | 1 | 3
c | 5 | 1
c | 4 | 2
我想从每组中选择第一行(a列,按b列、c列排序时)
colA | colB | colC
-----|------|-----
a | 1 | 9
b | 1 | 3
c | 4 | 2
构造查询以获得这些结果的最整洁的方法是什么?
(Postgresql 9)
谢谢,P。
最佳答案
您可以使用window function和派生表:
select cola, colb, colc
from (
select cola, colb, colc,
rank() over (partition by cola order by colb, colc asc) as r
from your_table
) as dt
where r = 1
窗口函数非常方便,应该放在每个人的SQL工具包中。