MySQL实现同名次排序、且名次之间不间隔排序


在这里插入图片描述
在这里插入图片描述

思路详解

1、首先我们知道的是要排序

select a.Score as Score
from Scores as a
order by a.Score desc;

2、比较难的是第二部分。
假设现在给你一个分数X,如何算出它的排名Rank呢?
我们可以先提取出大于等于X的所有分数集合H,将H去重后的元素个数就是X的排名。
比如你考了99分,但最高的就只有99分,那么去重之后集合H里就只有99一个元素,个数为1,因此你的Rank为1。
先提取集合H:

select b.Score 
from Scores as b
where b.Score >= X;

我们要的是集合H去重之后的元素个数,因此升级为

select count(distinct b.Score) from Scores b 
where b.Score >= X as Rank;

而从结果的角度来看,第二部分的Rank是对应一部分的分数来的,所以这里的X就是上面的a.Score,

select count(distinct b.Score) from Scores b 
where b.Score >= a.Score as Rank;

代码

select a.Score as Score,
(select count(distinct b.Score from Scores b
where b.Score>=a.Score) as 'rank'
from Scores as a
order by a desc;

本篇疑难点

1、最后输出的为两列数据,所以中间要用逗号隔开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值