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
 
 
執行結果圖

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM