mysql排名前十的学生,mysql--分数排名

f0635f21b23940663c2d7d4e1fbd89cb.png

94f1e0f3196f0df0340012b0ecc1b90b.png

解题思路:

1、首先,我们需要对分数进行倒序排序(以下得出的结果是没有去重过的倒序的分数)

select Score from Scores order by Score DESC

2、接下来我们还缺少一列Rank。例如:一个班有20个人,但是所有人都考了95分,那么全班同学都是并列第一即名次只有一个;如果一部分同学考了95,一部分考了90,一部分考了85,那么整个成绩的排名就分为3个名次。(以下得出的结果是去重之后名次的总数)

select count(distinct Score) from Scores

3、最后考虑如何将前面的两者结合起来,并且将各自的名次显示出来。在我们执行第二步的时候,是否可以这么考虑,在对分数进行去重统计总数的基础上,我们再加一个条件,就是统计去重总数的同时我们筛选出来比我们分数高的人的个数(因为这里是去重的统计,所以最终的出来的名次就是该人的真实名次,不会出现比如有两个人是并列第一,而接下来的那个人却是排名第三的这种错误的情况)这里+1的理解是因为条件部分使用的是 >  而不是>=,如果使用的是>=的话就不需要+1操作了,见解法二

(解法一)Select

a.Score as score, (select count(distinct b.Score)+1 from Scores as b where b.Score > a.Score) as Rank

from Scores as a order by a.Score DESC

(解法二)Select

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

from Scores as a order by a.Score DESC

执行结果图

6e039a3b597263901c17f690c6859446.png

标签:分数,名次,mysql,Rank,Score,Scores,排名,select

来源: https://www.cnblogs.com/vegetableDD/p/11619323.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值