乐趣区

数据分析中常用的SQL语句

分组选择数据

问题:如何获得每个分组前 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
退出移动版