刷题通过的题目排名

刷题通过的题目排名

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

有两种解题方法

方法一: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
全部评论
你好,请问第一种方法为啥不需要再对id进行排序了呀?
点赞 回复 分享
发布于 2024-05-20 15:32 吉林
请问ID升序不用处理么
点赞 回复 分享
发布于 2024-01-18 16:21 广东
请问为什么方法二不需要group by呀
点赞 回复 分享
发布于 2023-02-25 11:07 湖北

相关推荐

认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
评论
11
收藏
分享

创作者周榜

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