题解 | #刷题通过的题目排名#

刷题通过的题目排名

http://www.nowcoder.com/practice/cd2e10a588dc4c1db0407d0bf63394f3

rank() over,dense_rank() over,row_number() over的区别

1. rank() over:查出指定条件后的进行排名。特点是相同排名虽然并列,但是下一排名会空出位置

图片说明

2. dense_rank() over:查出指定条件后的进行排名。特点是相同排名并列,并且下一排名不会空出位置

图片说明

3. row_number() over:不存在并列排名的情况,只会顺序排名

图片说明

本题解法一

select *, DENSE_RANK() over(order by number desc)
FROM passing_number

本题解法二

SELECT *,(select count(DISTINCT b.number) from passing_number b where b.number>=a.number)
FROM passing_number a
ORDER BY a.number desc, a.id ASC

题外知识

如果本题要分区进行排名,即比如对英语成绩,数学成绩等分开进行排名,就需要用到Partition By
partition by是分区函数,经常与 over一起使用
如dense_rank() over(partition by subject order by degree )即是先对科目进行分区,然后分别对每个区再进行排名

全部评论

相关推荐

12-24 20:44
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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