解題思路:
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
執行結果圖
