力扣資料庫178題 分數排名

2021-10-06 11:31:02 字數 1598 閱讀 2909

最近在學習sql語句,主要使用mysql,在力扣上打卡解題,記錄一下大神們的解法。

題目

編寫乙個sql查詢來實現分數排名。

如果兩個分數相同,則兩個分數排名(rank)相同,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有「間隔」。

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

**題解(總結了大神們的)**以下

總結來自「猴子」:《經典排名問題》

以班級種學生的成績為例,查詢學生的排名問題。

「班級表」中的內容如下,記錄了每個學生所在的班級和對應的成績。

現在按照成績來排名,依據題意,成績相同的學生排名是並列的。比如:正常的排名是1,2,3,4,但是現在前3名成績相同,則排名結果應該是1,1,1,2。

【解題思路】

1、涉及到排名問題,可以使用視窗函式

2、專用視窗函式rank,dense_rank,row_number在用法上的區別?

針對問題二,用乙個例子可以直觀表達:

select*,

rank(

)over

(order

by 成績 desc

)as ranking,

dense_rank(

)over

(order

by 成績 desc

)as dese_rank,

row_rank(

)over

(order

by 成績 desc

)as row_num

from 班級表

得到結果:

從結果中可以看到三者的區別:

1)rank函式:出現並列的話會占用下一名次的位置,即正常排名是1,2,3,4,如果前三名並列,結果為1,1,1,4

3)row_number函式:不考慮名次並列的情況。即正常排名是1,2,3,4,如果前三名並列,結果仍為1,2,3,4

select score,

dense_rank(

)over

(order

by score desc)as

'rank'

from scores;

【本題考點】

1、考察如何使用視窗函式

2、專用視窗函式排名的區別:rank, dense_rank, row_number

關於視窗函式的用法,可以參看猴子的這篇文章《通俗易懂的學會:sql視窗函式》:

《通俗易懂的學會:sql視窗函式》

LeetCode力扣刷題資料庫(178) 分數排名

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 例如,根據上述給定的 scores 表,你的查詢應該返回 按分數從高到低排列 將選擇出來的命名為a select a.scor...

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 例如,根據上述給定...