题解 | #考试分数(三)#
考试分数(三)
https://www.nowcoder.com/practice/b83f8b0e7e934d95a56c24f047260d91
解题思路:题目中要求的是取score得分前两名的name,grade.id以及score,所以需要对score赋上排序号码
首先,把题目中要求的出现的值name,grade.id,score以及排序号码查询出来,这里使用了dense_rank()over()窗口函数,对score值排序赋值,至于为什么要用并列连续型排序,是因为题目中明确提到按score数值从大到小取前两名,只是在数值大小上取前两位,即使同一数值下有数个不同id也要同时显示出来
然后,把上面查询到的表格用作from子查询,题目中要求的是取score值前两名,所以where筛选要取rk为1,2,
最后,其余按题目要求排序即可
select id,name,score from (select grade.id id,name,score, dense_rank()over(partition by name order by score desc) rk from grade join language on grade.language_id=language.id) xin where rk in(1,2) order by name,score desc,id