leetcode 資料庫 178 分數排名

2021-09-26 19:59:37 字數 1558 閱讀 9313

題目:編寫乙個 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.854.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...