1

嗨,如果我有下表:

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 函数,但只是在表中标记序列....

4

2 回答 2

2

使用聚合函数和max()分组方式应该可以解决问题。personscore_type

于 2013-09-03T14:35:15.753 回答
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;
于 2013-09-03T14:42:09.907 回答