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

猜你喜欢

转载自www.cnblogs.com/vegetableDD/p/11619323.html