LeetCode 資料庫178 分數排名

2021-10-03 14:54:58 字數 845 閱讀 1407

題目描述在鏈結 leetcode-178.分數排名

由題目描述我們可以得知需要求出兩部分內容:1.經過從大到小排序的分數score 2.排序後score對應的名次rank,若score相等,則屬於並列,名次相同

第一部分:顯示排序分數

這一部分較簡單,使用select-from-where搜尋語句,配合order by-desc降序排序:

select score

from scores

order

by score desc

第二部分:顯示分數對應的名次

這部分是本題的難點,如何求出沒個分數的名次?名次實際上等於某乙個分數大於等於所有分數的個數,也就是所有分數中大於等於它的個數,考慮到存在相同分數並列名次,因此,某一分數的排名計算方法為:去重後的所有分數大於等於它的個數

例如對於排名第一的分數,所有分數去重後只有乙個大於等於它即它自己,計算得到排名1;對於排名第二的分數,有第一和它自己大於等於它,計算得到排名二

我們為第一部分的表scores取別名a,在使用乙個表scores b進行score的自身聯表查詢,去重後大於等於a.score的b.score的個數就是a.score的排名

完整**:

select a.score,

(select

count

(distinct b.score)

from scores b where b.score>=a.score)

as rank

from scores a

order

by score desc

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 分數排名

題目 編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定...

資料庫專題 leetcode178 分數排名

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 例如,根據上述給定的 s...