本文主要是介绍【高频SQL (进阶版)】1112.每位学生的最高成绩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:
多个排序要求,以及取舍记录,比如取一条。适合用窗口函数。
row_number() over (partition by xx order by xx desc,xx asc)
rank()over (partition ..)
dense_rank()over (partition..)
rank() : 阶梯排序,前两个是并列第一名,接下来就是第3名
dense_rank(): 连续排序,前两个第一名,接下来就是第2名
row_number(): 不会出现重复的排序,就是1,2,3...
不是说涉及到最大值,就用max的。窗口函数排列,取第一条,依然可以
参考答案:
所以可以直接,根据学生分组,然后排序,然后取舍(比如 取第一行),然后最后再 来一个order by 排序。
select student_id ,course_id,grade from (
select student_id ,course_id,grade,
rank()over (partition by student_id order by grade desc,course_id )as ranking from Enrollments ) t -- 这里如果写成 order by course_id,grade desc 就不对了。以及这里用row_number 也可以。
where t.ranking = 1
order by student_id
这篇关于【高频SQL (进阶版)】1112.每位学生的最高成绩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!