mysql--分数排名

Posted vegetabledd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql--分数排名相关的知识,希望对你有一定的参考价值。

技术图片                                                   

技术图片

解题思路:

  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
 
 
执行结果图
技术图片

 

 

以上是关于mysql--分数排名的主要内容,如果未能解决你的问题,请参考以下文章

MySQL分数排名

MySQL 基于得分和时间的排名

mysql中的用户按他们的分数排名

mysql--分数排名

从使用 PHP 的 MySQL 数据库到 iPhone 的分数列表中获取排名

mysql 在总和和最佳分数上的排名