sql分数排名

文章介绍了如何利用SQL查询对分数进行降序排序,当分数相同时保持相同排名,确保排名无空缺。通过子查询计算大于等于当前成绩的去重分数数量作为排名,例如,若有成绩70,80,80,90,80的排名将是2。作者以此方法在没有项目时自我学习和消遣。
摘要由CSDN通过智能技术生成

编写 SQL 查询对分数进行排序。排名按以下规则计算:

  1. 分数应按从高到低排列

  2. 如果两个分数相等,那么两个分数的排名应该相同。

  3. 在排名相同的分数后,排名数应该是下一个连续的整数。也就是排名之间不应该有空缺的数字。
    在这里插入图片描述
    解题:
    判断当前比当前成绩大的所有数据,并去重之后的数量就是当前成绩的排名
    ???好懵逼,什么当前比当前大的成绩

    先看完整代码

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

先看子查询,查找的结果是一个数量,这个数量有一个条件,去重复的成绩,和当前的成绩进行判断,即:b表去重复的成绩>=a表当前的成绩,得到的东西是一个数量,这个数量就是当前的排名。

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

例如以下数据:去重复后只剩下70,80,90三个成绩数据,第一个成绩是80,去重复的成绩>=当前的成绩得到的东西是数字2,代表2个数据,80和90,即排名为2。
在这里插入图片描述
最后对查询到的数据对成绩进行降序排序,得到结果。

order by a.Score desc

在这里插入图片描述
OK,一个简单的成绩排序SQL语句就写好啦,最近公司没有给分配项目,没有客户的骚扰属实无聊,通过这种方式来摸鱼,顺便也学习,要是翅膀硬了就跑路哈哈哈哈。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值