当前位置:首页|资讯

LeetCode 3252. 英超积分榜排名 II

作者:您是打尖儿还是住店呢发布时间:2024-10-07

题目描述

表:TeamStats




 team_id 是这张表的唯一主键。这张表包含队伍 id,队伍名,场次,赢局,平局和输局。

编写一个解决方案来计算联盟中每支球队的 得分,排名 和 等级。积分计算方式如下:

  • 赢局 有 3 点得分

  • 平局 有 1 点得分

  • 输局 有 0 点得分

注意:积分相同的球队必须分配相同的排名。

等级评级:

  • 根据积分将联盟分为 3 个等级:

  • 等级 1:前 33% 的队伍

  • 等级 2:中间 33% 的队伍

  • 等级 3:最后 34% 的队伍

  • 如果等级边界出现平局,平局的队伍分配到更高的等级。

返回结果表以 points 降序 排序,然后以 team_name 升序 排序。

结果格式如下所示。

 

示例:

输入:

TeamStats 表:

输出:


  • 谢菲尔德联队拿下 56 分(18 胜 * 3 分 + 2 平 * 1 分)位列第 1。

  • 富勒姆拿下 55 分(18 胜 * 3 分 + 1 平 * 1 分)位列第 2。

  • 纽卡斯尔联队拿下 43 分(11 胜 * 3 分 + 10 平 * 1 分)位列第 3。

  • 切尔西拿下 41 分(13 胜 * 3 分 + 2 平 * 1 分)位列第 4。

  • 伯恩利拿下 27 分(6 胜 * 3 分 + 9 平 * 1 分)位列第 5。

  • 诺丁汉森林拿下 24 分(6 胜 * 3 分 + 6 平 * 1 分)位列第 6。

  • 埃弗顿和卢顿镇均拿下 12 分,埃弗顿 2 胜 * 3 分 + 6 平 * 1 分,卢顿镇 4 胜 * 3 分。两支队伍并列位列第 7。

  • 利物浦拿下 11 分(1 胜 * 3 分 + 8 平 * 1 分)位列第 9。

  • 阿斯顿维拉拿下 9 分(1 胜 * 3 分 + 6 平 * 1 分)位列第 10。

等级计算:

  • 等级 1:根据积分排名前 33% 的球队。谢菲尔德联队、富勒姆、纽卡斯尔联队和切尔西属于等级 1。

  • 等级 2:中间 33% 的球队。伯恩利、诺丁汉森林、埃弗顿和卢顿镇属于等级 2。

  • 等级 3:垫底 34% 的球队。利物浦和阿斯顿维拉落入等级 3。

解法

窗口函数 + CASE WHEN

我们可以使用窗口函数 RANK() 来计算每支球队的积分、排名,并计算总球队数。然后,我们可以使用 CASE WHEN 语句来确定每支球队的等级。





Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1