选择基于列分区每人两个极大值(select two maximum values per perso

2019-10-18 13:56发布

嗨,如果我有如下表:

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功能之前,但只在一个表中的标签序列....

Answer 1:

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;


Answer 2:

使用max()通过聚合函数与分组一起person ,并score_type应该做的伎俩。



文章来源: select two maximum values per person based on a column partition
标签: db2 max