如果之前已经回答过,请道歉。
假设我有下表:

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工具包中。

08-04 21:34