zoukankan      html  css  js  c++  java
  • 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
     
     
    执行结果图
  • 相关阅读:
    再谈每周工作不要超过 40 小时
    前苹果雇员潜入总部 只为完成自己的项目
    C语言解析pcap文件得到HTTP信息实例(原创,附源码)
    Android 2.1 源码结构分析
    linux 获取当前日期与时间
    谷歌史上十大优秀产品榜:Android傲娇上位
    在eclipse中查看android SDK的源代码
    网络开发必备的HTTP协议知识
    Linux TCP/IP协议栈源码阅读笔记
    浅析UPnP协议
  • 原文地址:https://www.cnblogs.com/vegetableDD/p/11619323.html
Copyright © 2011-2022 走看看