178 分數排名

2021-10-03 21:41:43 字數 1346 閱讀 2805

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(rank)相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有「間隔

例如,根據上述給定的 scores 表,你的查詢應該返回(按分數從高到低排列):

例如,根據上述給定的 scores 表,你的查詢應該返回(按分數從高到低排列):

解析:最後的結果包含兩個部分,第一部分是降序排列的分數,第二部分是每個分數對應的排名。

第一部分不難寫:

select a.score as score

from scores a

order

by a.score desc

比較難的是第二部分。假設現在給你乙個分數x,如何算出它的排名rank呢?

我們可以先提取出大於等於x的所有分數集合h,將h去重後的元素個數就是x的排名。比如你考了99分,但最高的就只有99分,那麼去重之後集合h裡就只有99乙個元素,個數為1,因此你的rank為1。

先提取集合h:

select b.score from scores b where b.score >= x;
我們要的是集合h去重之後的元素個數,因此公升級為:

select

count

(distinct b.score)

from scores b where b.score >= x as rank;

而從結果的角度來看,第二部分的rank是對應第一部分的分數來的,所以這裡的x就是上面的a.score,把兩部分結合在一起為:

select a.score as score,

(select

count

(distinct b.score)

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

as rank

from scores a

order

by a.score desc

其實該題最後可以通過sqlyog驗證:驗證如下:

菜鳥今日總結:在做演算法推導不明白的時候,可以實際去編譯一下,這樣更好理解!!!

178 分數排名

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

178 分數排名

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

178 分數排名

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