我正在使用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个查询?
我认为最简单的方法是distinct on
:
select distinct on (user) user, color
from t
order by user, rank;