题解 | #考试分数(三)#

考试分数(三)

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
全部评论

相关推荐

02-10 12:23
已编辑
新余学院 C++
采集想要offer:专业技能那里要一条一条的列出来吧,感觉你项目很厉害了,但是如果你不写技术栈面试官对你项目不太懂的话都没办法问你八股😂C++都是基架岗,都是一群9✌🏻在卷,我觉得你要是有时间学个go把MySQL和redis写上去找个开发岗吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务