有两种解题方法

方法一: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