筛选出组内排名前2的记录

考试分数(三)

http://www.nowcoder.com/questionTerminal/b83f8b0e7e934d95a56c24f047260d91

#从输出结果来看,需考虑并列第一的情况,并且依然存在第二名。确定排序函数为dense_rank
#整体思路:
#1.创建一个中间表,包含需要输出的除了name以外的字段以及分数的组内排名;
#2.关联语言表查语言名称
#3.用where筛出组内排名等于1或2的记录
#4.各种排序。
select t1.id
        ,l.name
        ,t1.score
from 
(select id,language_id,score
         ,(dense_rank()over(partition by language_id order by score desc))as s_rank
from grade)t1
join language l on t1.language_id=l.id
where t1.s_rank<=2
order by l.name,t1.score desc,t1.id;
一句口诀掌握排序函数row_number、rank、dense_rank的用法:
row_number 不存在并列
dense_rank 和rank存在并列,但rank很跳。
【任意门】https://blog.nowcoder.net/n/e5252c9afc7846e885d9307e4f6575de


全部评论
其实查一下单词的意思就很好记了,我感觉比口诀好记多了诶。dense:密集的,所以dense_rank就是密集排序,比如1,1,2,row:行,所以row_number就是按行排序,比如1,2,3,剩下一种排序就是rank了,比如1,1,3
点赞 回复 分享
发布于 2023-02-26 18:04 湖北

相关推荐

美团笔试只有我觉得难吗?
天灰灰会不会:我也觉得难,选择题一堆大模型题目乱蒙,编程题拼尽全力依然只a2
投递美团等公司6个岗位 > 美团求职进展汇总
点赞 评论 收藏
分享
评论
16
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务