題目
:編寫乙個 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 |
+-------+------+
標準答案之一:
select score,(select count(distinct score) from scores where score>=s.score)
from scores s
order by s.score desc
比較能理解的解釋
:
select count(distinct score) from scores where score>=s.score
將返回1的計數,因為只有乙個記錄的獨特分數大於或等於4.00
。您的資料中的第二條記錄也是如此,其中也有乙個得分4.00
。對於分數3.85
,子查詢將找到2的獨特計數,因為有兩個分數大於或等於3.85
,即3.85
和4.00
。您可以在整個表中應用此邏輯,以說服自己查詢的工作方式。
+-------+------+
| score | rank |
+-------+------+
| 4.00 | 1 | <-- 1 score >= 4.00
| 4.00 | 1 | <-- 1 score >= 4.00
| 3.85 | 2 | <-- 2 scores >= 3.85
| 3.65 | 3 | <-- 3 scores >= 3.65
| 3.65 | 3 | <-- 3 scores >= 3.65
| 3.50 | 4 | <-- 4 scores >= 3.50
+-------+------+
LeetCode資料庫 178 分數排名
編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的 s...
LeetCode 資料庫178 分數排名
題目描述在鏈結 leetcode 178.分數排名 由題目描述我們可以得知需要求出兩部分內容 1.經過從大到小排序的分數score 2.排序後score對應的名次rank,若score相等,則屬於並列,名次相同 第一部分 顯示排序分數 這一部分較簡單,使用select from where搜尋語句,...
資料庫專題 leetcode178 分數排名
編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的 s...