首页 > 解决方案 > 如何选择 group by 未使用的列?

问题描述

id | gender |  max   
---+--------+--------
 1 | F      |   5972
 1 | M      |   2428
 2 | F      |   1954
 3 | M      |   2093
 3 | F      |   2118

我已将 2 个表合并到上面的表中。我想从同一个id中找到最高分

输出表应该是这样的:

id | gender |  max   
---+--------+--------
 1 | F      |   5972
 2 | F      |   1954
 3 | F      |   2118

如果我不需要打印性别,这很容易,因为我可以使用最大评论和 group by 子句。

select id, max(max)
group by id
order by id;

上面的行数相同,但问题是我无法打印性别。

标签: sqlpostgresql

解决方案


这应该很顺利:

select b.id, b.gender,b.max from (
select dense_rank() over(partition by id order by max desc) as rk,id, gender, max
from table
)
where b.rk = 1

-- 添加:如果您不希望在最大平局的情况下出现多个性别记录,我们可以在 RANK FUNCTION 中按顺序添加“性别”之类的条件。


推荐阅读