我的SQL表看起来像这样
+------+--------+
| RANK | ID |
+------+--------+
| 1 | 234 |
| 2 | 234 |
| 3 | 234 |
| 1 | 421 |
| 2 | 421 |
+------+--------+
我想按ID分组并返回最高等级。我不知道该怎么做,我的代码不起作用。
SELECT * FROM table GROUP BY ID WHERE max(RANK)
答案 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
列。