筛选出组内排名前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 湖北

相关推荐

10-25 22:20
门头沟学院 Java
代码飞升:同学院本,个人亮点去了,打招呼里面的废话也去了,学院本就是路边一条,明天拉满然后该学还是学,小厂也行尽量先有一段实习。另外你的项目描述写的不好,具体列一下可被提问的点,然后量化一下指标或者收益吧
投了多少份简历才上岸
点赞 评论 收藏
分享
大世界中的渺小一棵:看出来你软硬都有基础,但是这样写简历软硬都擦边不知道你想投什么,建议针对岗位jd针对性修改下。
点赞 评论 收藏
分享
评论
16
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务