comments | difficulty | edit_url | tags | |
---|---|---|---|---|
true |
简单 |
|
表:TeamStats
+------------------+---------+ | Column Name | Type | +------------------+---------+ | team_id | int | | team_name | varchar | | matches_played | int | | wins | int | | draws | int | | losses | int | +------------------+---------+ team_id 是这张表的唯一主键。 这张表包含队伍 id,队伍名,场次,赢局,平局和输局。
编写一个解决方案来计算联盟中每支球队的 得分 和 排名。积分计算方式如下:
- 赢局 有
3
点得分 - 平局 有
1
点得分 - 输局 有
0
点得分
注意:积分相同的球队必须分配相同的排名。
返回结果表以 points
降序 排序,然后以 team_name
升序 排序。
结果格式如下所示。
示例:
输入:
TeamStats
表:
+---------+-----------------+----------------+------+-------+--------+ | team_id | team_name | matches_played | wins | draws | losses | +---------+-----------------+----------------+------+-------+--------+ | 1 | Manchester City | 10 | 6 | 2 | 2 | | 2 | Liverpool | 10 | 6 | 2 | 2 | | 3 | Chelsea | 10 | 5 | 3 | 2 | | 4 | Arsenal | 10 | 4 | 4 | 2 | | 5 | Tottenham | 10 | 3 | 5 | 2 | +---------+-----------------+----------------+------+-------+--------+
输出:
+---------+-----------------+--------+----------+ | team_id | team_name | points | position | +---------+-----------------+--------+----------+ | 2 | Liverpool | 20 | 1 | | 1 | Manchester City | 20 | 1 | | 3 | Chelsea | 18 | 3 | | 4 | Arsenal | 16 | 4 | | 5 | Tottenham | 14 | 5 | +---------+-----------------+--------+----------+
解释:
- 曼城和利物浦均拿下 20 分(6 赢 * 3 分 + 2 平 * 1 分),所以他们并列第一。
- 切尔西拿下 18 分(5 赢 * 3 分 + 3 平 * 1 分)所以位列第三。
- 阿森纳拿下 16 分(4 赢 * 3 分 + 4 平 * 1 分)位列第四。
- 托特纳姆热刺队拿下 14 分(3 赢 * 3 分 + 5 平 * 1 分)位列第五。
输出表以得分降序排序,然后以 team_name 升序排序。
我们可以使用 RANK()
窗口函数来计算球队的排名,然后按照得分和球队名进行排序。
# Write your MySQL query statement below
SELECT
team_id,
team_name,
wins * 3 + draws points,
RANK() OVER (ORDER BY (wins * 3 + draws) DESC) position
FROM TeamStats
ORDER BY 3 DESC, 2;
import pandas as pd
def calculate_team_standings(team_stats: pd.DataFrame) -> pd.DataFrame:
team_stats["points"] = team_stats["wins"] * 3 + team_stats["draws"]
team_stats["position"] = team_stats["points"].rank(method="min", ascending=False)
team_stats = team_stats.sort_values(
by=["points", "team_name"], ascending=[False, True]
)
return team_stats[["team_id", "team_name", "points", "position"]]