选择具有最大列值distinct列的行

时间:2016-04-06 12:02:03

标签: sql postgresql greatest-n-per-group

我有一个数据表作为车队表数据:

enter image description here

我试图为每个aircraft_count获取MAX carriercode以及其他列。

我知道这有效,但我无法获得其余的列

select carriercode, max(aircraft_count) as peak
from fleet
group by carriercode;

这是我最接近的。

select f1.id, distinct(f1.carriercode), f1.aircraft_count, f1."timestamp"
from fleet f1
where f1.aircraft_count = 
    (select max(f2.aircraft_count)
     from fleet f2
     where f1.carriercode = f2.carriercode)
order by f1.aircraft_count desc;

预期结果:

id - carriercode - max_count - timestamp
10 - EIN         - 100       - 2016-03-27 23:07:49.121449
252 -SCO         - 34        - 2016-03-27 23:07:53.282367 

1 个答案:

答案 0 :(得分:1)

在Postgres中,您可以使用distinct on

select distinct on (f.carriercode) f.*
from fleet f
order by carriercode, aircraft_count desc;

这会返回每carriercode行,aircraft_count最高的一行。如果存在关系,则选择任意行。

如果您希望所有行都匹配,那么distinct on就不能正常工作了。代替:

select f.*
from (select f.*,
             dense_rank() over (partition by carrier_code order by aircraft_count desc) as seqnum
      from fleet f
     ) f
where seqnum = 1;