Postgres arg min in a group by

问题描述 投票:0回答:1

我正在使用Postgres 9.6,我有以下数据:

user, rank, color
Alice, 1, blue
Alice, 2, green
Bob, 2, blue
Bob, 1, red

我希望我想要的输出是:

user, top_color
Alice, blue
Bob, red

我尝试过的:

WITH top_rank AS (
       SELECT "user", min(rank) AS rank FROM table GROUP BY user
),
SELECT "user", color 
FROM table 
JOIN top_rank on table.rank = top_rank.rank GROUP BY "user";

有没有更简单的方法(理想情况下1个查询,与argmin类似的运算符)或我需要使用2个查询?

sql postgresql
1个回答
1
投票

我认为最简单的方法是distinct on

select distinct on (user) user, color
from t
order by user, rank;
© www.soinside.com 2019 - 2024. All rights reserved.