3246. 英超积分榜排名 🔒
题目描述
表: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()
窗口函数来计算球队的排名,然后按照得分和球队名进行排序。
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 |
|