根据列分区为每个人选择两个最大值

时间:2013-09-03 13:35:34

标签: db2 max

大家好,如果我有下表:

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函数,但仅用于标记表格中的序列....

2 个答案:

答案 0 :(得分:2)

使用max()聚合函数以及personscore_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;