題目描
述:
\color題目描述:
題目描述
:編寫乙個 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 |
+-------+------+
思路分
析:
\color思路分析:
思路分析
:我們根據題幹可知,結果的第一列score需要進行不去重的降序排列,在結果的第二列rank計算排名時還要進行去重,因為兩個4.00並列為第1名,也就是不管有多少個4.00都需要去重並列為第一名。
那麼這道題的關鍵就是如何計算去重後的排名了?而去重後的排名的實質就是》=自己分數的人數。
代 碼實
現:
\color**實現:
**實現
:
select a.score,
(#去重後計算個數就是a的排名
select
count
(distinct b.score)
from scores b
#篩選出不小於a的分數
where b.score >= a.score
)as rank
from scores a
#按照分數進行降序排列
order
by a.score desc
;
這道題涉及到排序、去重可能會有點繞,尤其是那個並列排名,如果不理解的話可以把結果的第一列去重後手動排一下名。
博 客推
薦:
\color部落格推薦:
部落格推薦
:此題涉及到mysql中的排序、子查詢。請參考我的專欄
mysql從入門到精通之排序查詢
mysql從入門到精通之子查詢
分數排名 mysql mysql 分數排名
編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的 s...
分數排名 mysql MYSQL分數排名
編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的 s...
LeetCode178 MySQL 分數排名
編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的sc...