大家好,如果我有下表:
Person------Score-------Score_type
1 30 A
1 35 A
1 15 B
1 16 B
2 74 A
2 68 A
2 40 B
2 39 B
每个人和分数类型的位置我想要选出最高分来获得如下表格:
Person------Score-------Score_type
1 35 A
1 16 B
2 74 A
2 40 B
我可以使用多个select语句来执行此操作,但这将非常麻烦,尤其是稍后。所以我想知道是否有一个功能可以帮助我做到这一点。我之前使用过parititon函数,但仅用于标记表格中的序列....
答案 0 :(得分:2)
使用max()
聚合函数以及person
和score_type
分组应该可以解决问题。
答案 1 :(得分:2)
select person,
score_type,
max(score) as score
from scores
group by person, score_type
order by person, score_type;
使用" 分区功能"我想你的意思是窗口功能。它们确实可以用于此:
select person
score_type,
score
from (
select person,
score_type,
score,
row_number() over (partition by person, score_type order by score desc) as rn
from scores
) t
where rn = 1
order by person, score_type;