postgresql - 按编号分组并返回最高值

时间:2018-05-18 19:08:25

标签: sql postgresql group-by

我的SQL表看起来像这样

+------+--------+
| RANK |  ID    |
+------+--------+
| 1    | 234    |
| 2    | 234    |
| 3    | 234    |
| 1    | 421    |
| 2    | 421    |
+------+--------+

我想按ID分组并返回最高等级。我不知道该怎么做,我的代码不起作用。

SELECT * FROM table GROUP BY ID WHERE max(RANK) 

2 个答案:

答案 0 :(得分:3)

你很亲密:

SELECT ID, max(RANK) FROM table GROUP BY ID

此答案假定您需要以下结果:

+------+--------+
| RANK |  ID    |
+------+--------+
| 3    | 234    |
| 2    | 421    |
+------+--------+

答案 1 :(得分:1)

另一种方法是distinct on

select distinct on (id) t.*
from t
order by id, rank desc;

distinct on的优势在于您可以轻松获取该行中的所有列,而不仅仅是rank列。