178. Rank Scores
表格:Scores
+-------------+---------+
| 列名 | 類型 |
+-------------+---------+
| id | int |
| score | decimal |
+-------------+---------+
id 是此表格的主鍵(具有唯一值的列)。 此表的每一行包含一場比賽的得分。得分是一個有兩位小數的浮點值。
撰寫一個解決方案來查找得分的排名。排名應該根據以下規則計算:得分應該從最高到最低排序。
如果兩個得分相同,則它們應該具有相同的排名。
在出現平局之後,下一個排名號應該是下一個連續的整數值。換句話說,排名之間不應有空隙。 返回按得分降序排列的結果表。
結果格式如下例所示。
範例:
輸入: Scores 表:
+----+-------+
| id | score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
輸出:
+-------+------+
| score | rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+-------+------+
+-------------+---------+
id 是此表格的主鍵(具有唯一值的列)。 此表的每一行包含一場比賽的得分。得分是一個有兩位小數的浮點值。
撰寫一個解決方案來查找得分的排名。排名應該根據以下規則計算:得分應該從最高到最低排序。
如果兩個得分相同,則它們應該具有相同的排名。
在出現平局之後,下一個排名號應該是下一個連續的整數值。換句話說,排名之間不應有空隙。 返回按得分降序排列的結果表。
結果格式如下例所示。
範例:
輸入: Scores 表:
+----+-------+
| id | score |
+----+-------+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+----+-------+
輸出:
+-------+------+
| score | rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+-------+------+
MySQL
# Write your MySQL query statement below
SELECT score,
DENSE_RANK() OVER (ORDER BY score DESC) AS `rank`
FROM Scores
ORDER BY score DESC;
379ms
Pandas
import pandas as pd
def order_scores(scores: pd.DataFrame) -> pd.DataFrame:
# Calculate the rank using the 'dense' method and sort in descending order
scores['rank'] = scores['score'].rank(method='dense', ascending=False).astype(int)
# Sort the DataFrame by score in descending order
result = scores.sort_values(by='score', ascending=False).reset_index(drop=True)
# Select only the necessary columns
return result[['score', 'rank']]
67.56MB, 458ms
PostgreSQL
-- Write your PostgreSQL query statement below
SELECT
score,
DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM
Scores
ORDER BY
score DESC;
0.00MB, 209ms