刷题通过的排名题解

刷题通过的题目排名

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

方法一.首先要通过题目降序,id升序,那么sql应该为:
select a.id,a.number 
 from passing_number a order by a.number desc, a.id asc;
要得到通过题目的排名,比如你通过了8分,,你同学a也通过了8分,找到大于等于你的成绩,一个9分,一个8分,一个8分,去重复,就一个9,一个8,count一下总数,第2名,如果有三个同学通过了7个呢,同理,9,8,8,7,7,7 后面比这个少的,已经死在了筛选条件,去重,9,8,7,count=3,所以sql为:
select count(distinct b.number) from passing_number b where b.number>=X
联立为:
select a.id,a.number,
(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;

方法二.使用mysql8.0(我强烈要求升级的mysql8.0,以便大家使用窗口函数)或者sqlite自带的dense_rank()函数,由于rank是mysql8.0的关键字,所以不能直接使用rank,要用" ` "号包裹,或者使用t_rank
SELECT
    *,
    dense_rank ( ) over ( ORDER BY number DESC ) `rank` 
FROM
    passing_number 
ORDER BY
    `rank`,
    id





全部评论
起凡邓艾?
点赞 回复 分享
发布于 2021-10-19 09:43
红名大佬不愧是红名大佬,佩服
点赞 回复 分享
发布于 2021-04-23 14:10
第一个方法的逻辑不错..一直对自连接有点懵..
点赞 回复 分享
发布于 2021-04-09 12:38

相关推荐

05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
78
15
分享

创作者周榜

更多
牛客网
牛客企业服务