题解 | #刷题通过的题目排名#
刷题通过的题目排名
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 )即是先对科目进行分区,然后分别对每个区再进行排名

查看1道真题和解析