分组求top最高
方式1,最简单的直接使用开窗函数:
select
name,
course,
score
from (
select
*,
dense_rank() over(partition by course order by score desc) as rn
from b1
) tb where b.rn=1;
方式2,下面这种可能没开窗函数那么直观理解,实现思路其实就是从b1表里面逐条取数据,每次统计在该记录所属课程的所有记录中,比这个记录大的所有记录总数,如果是0,说明这条记录就是最大的。
select
*
from tb1
where (select count(*) from tb1 tb2 where tb2.course=tb1.course and tb2.score>tb1.score) = 0;
输出: