編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。請注意,平分后的下一個名次應該是下一個連續的整數值。換句話說,名次之間不應該有“間隔”。
+----+-------+
| Id | Score |
+----+-------+
| 1 ?| 3.50 ?|
| 2 ?| 3.65 ?|
| 3 ?| 4.00 ?|
| 4 ?| 3.85 ?|
| 5 ?| 4.00 ?|
| 6 ?| 3.65 ?|
+----+-------+
例如,根據上述給定的?Scores 表,你的查詢應該返回(按分數從高到低排列):
+-------+------+
| Score | Rank |
+-------+------+
| 4.00 ?| 1 ? ?|
| 4.00 ?| 1 ? ?|
| 3.85 ?| 2 ? ?|
|?3.65 ?| 3 ? ?|
| 3.65 ?| 3 ? ?|
| 3.50 ?| 4 ? ?|
+-------+------+
思路:嵌套查詢,先查scroe按降序排列,然后查每一個分數,有多少去重分數大于它,再加一就是排名。
select a.Score as 'Score',(select count(distinct b.Score)+1 from Scores as b where a.Score<b.Score) as 'Rank'
from Scores a
order by a.Score DESC
?