分组选择数据
问题:如何获得每个分组前 n 项结果?
场景:假设有一个表,记录了学生所有科目的成绩,那么现在要取出每个科目分数最高的 3 位同学的考试成绩。
表名为 student_grade
表中字段为:
course_id,course_name, student_id, student_name, grade
方法一:利用 row_number() 函数
select course_id,course_name, student_id, student_name, grade,
row_number() over(partition by course_id order by grade desc) as rank
from student_grade
where rank <= 3
方法二:利用嵌套函数
select course_id,course_name, student_id, student_name, grade,
(select count(*)from student_grade as t2
where t1.grade<=t2.grade) as rank
from student_grade as t1
where rank <=3