王廷瑋|數位醫療|智慧醫療: 178. Rank Scores WFU

2024年7月9日 星期二

178. Rank Scores

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 |

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


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