数据分析中常用的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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理