LeetCode 分數排名

2021-09-27 02:56:54 字數 1450 閱讀 7388

題目描

述:

\color題目描述:

題目描述

:編寫乙個 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 |

+-------+------+

思路分

析:

\color思路分析:

思路分析

:我們根據題幹可知,結果的第一列score需要進行不去重的降序排列,在結果的第二列rank計算排名時還要進行去重,因為兩個4.00並列為第1名,也就是不管有多少個4.00都需要去重並列為第一名。

那麼這道題的關鍵就是如何計算去重後的排名了?而去重後的排名的實質就是》=自己分數的人數。

代 碼實

現:

\color**實現:

**實現

select a.score,

(#去重後計算個數就是a的排名

select

count

(distinct b.score)

from scores b

#篩選出不小於a的分數

where b.score >= a.score

)as rank

from scores a

#按照分數進行降序排列

order

by a.score desc

;

這道題涉及到排序、去重可能會有點繞,尤其是那個並列排名,如果不理解的話可以把結果的第一列去重後手動排一下名。

博 客推

薦:

\color部落格推薦:

部落格推薦

:此題涉及到mysql中的排序、子查詢。請參考我的專欄

mysql從入門到精通之排序查詢

mysql從入門到精通之子查詢

分數排名 mysql mysql 分數排名

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

分數排名 mysql MYSQL分數排名

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

LeetCode178 MySQL 分數排名

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