有两种解题方法
方法一:dense_rank()函数
- row_number()对应唯一排序:1、2、3、4
- dense_rank()对应相同次序可重复,但不跳过下一个次序值:1、2、2、3
- rank()对应相同次序可重复,并且跳过下一个次序值:1、2、2、4
select id, number, dense_rank() over (order by number desc) t_rank from passing_number
方法二:使用where子查询
注意:筛选条件需要使用distinct去重才能得到真正的dense_rank排名,如果没有去重,得到的是rank的排名。
select p1.id ,p1.number, (select count(distinct p2.number) from passing_number as p2 where p2.number >= p1.number) as t_rank from passing_number as p1 order by number desc,id asc