SQL,力扣题目1194,锦标赛优胜者

devtools/2024/11/14 6:17:48/

一、力扣链接

LeetCode1194

二、题目描述

Players 玩家表

+-------------+-------+
| Column Name | Type  |
+-------------+-------+
| player_id   | int   |
| group_id    | int   |
+-------------+-------+
player_id 是此表的主键(具有唯一值的列)。
此表的每一行表示每个玩家的组。

Matches 赛事表

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| match_id      | int     |
| first_player  | int     |
| second_player | int     | 
| first_score   | int     |
| second_score  | int     |
+---------------+---------+
match_id 是此表的主键(具有唯一值的列)。
每一行是一场比赛的记录,first_player 和 second_player 表示该场比赛的球员 ID。
first_score 和 second_score 分别表示 first_player 和 second_player 的得分。
你可以假设,在每一场比赛中,球员都属于同一组。

每组的获胜者是在组内累积得分最高的选手。如果平局,player_id 最小 的选手获胜。

编写解决方案来查找每组中的获胜者。

返回的结果表单 没有顺序要求 。

三、目标拆解

四、建表语句

Create table If Not Exists Players (player_id int, group_id int)
Create table If Not Exists Matches (match_id int, first_player int, second_player int, first_score int, second_score int)Truncate table Players
insert into Players (player_id, group_id) values ('10', '2')
insert into Players (player_id, group_id) values ('15', '1')
insert into Players (player_id, group_id) values ('20', '3')
insert into Players (player_id, group_id) values ('25', '1')
insert into Players (player_id, group_id) values ('30', '1')
insert into Players (player_id, group_id) values ('35', '2')
insert into Players (player_id, group_id) values ('40', '3')
insert into Players (player_id, group_id) values ('45', '1')
insert into Players (player_id, group_id) values ('50', '2')
Truncate table Matches
insert into Matches (match_id, first_player, second_player, first_score, second_score) values ('1', '15', '45', '3', '0')
insert into Matches (match_id, first_player, second_player, first_score, second_score) values ('2', '30', '25', '1', '2')
insert into Matches (match_id, first_player, second_player, first_score, second_score) values ('3', '30', '15', '2', '0')
insert into Matches (match_id, first_player, second_player, first_score, second_score) values ('4', '40', '20', '5', '2')
insert into Matches (match_id, first_player, second_player, first_score, second_score) values ('5', '35', '50', '1', '1')

五、过程分析

 1、纵向拼接所有选手id的分数

2、分组并排序

3、筛选rn为1的

六、代码实现

with t1 as(
select first_player player_id, first_score score from Matches
union all 
select second_player, second_score from Matches
)
,t2 as(select player_id, (select group_id from Players p where p.player_id = t1.player_id) group_id,row_number() over(partition by (select group_id from Players p where p.player_id = t1.player_id) order by sum(score) desc) rnfrom t1group by group_id, player_id
)
select group_id, player_id
from t2 where rn = 1;

七、结果验证

八、小结

1、CTE表达式 + union all + 窗口函数 + 子查询

2、题目要求找出组内所有成员的累计分数,与matches表的胜负无关

九、番外

对题目的第一种理解,通过了部分测试用例,后面发现思路不对


http://www.ppmy.cn/devtools/133449.html

相关文章

CMake 实战

我现在项目的目录结构如下 project_root/ ├── CMakeLists.txt ├── main.cpp 主函数 ├── third_part/ │ ├── CMakeLists.txt # 总的 third_part CMakeLists.txt │ ├── json/ │ │ ├── CMakeLists.txt # json 的 CMakeLists.txt │ │ └── json.hpp │ ├…

vue的样式知识点

一、样式的定义 1、基本定义&#xff1a;Vue样式通常使用<style>标签在单文件组件中定义。这些样式可以应用于模板中的HTML元素。 2、全局样式&#xff1a;在Vue项目的根组件中引入全局样式文件&#xff0c;全局样式文件中的样式会应用到整个项目中的所有组件。 3、局…

智象未来(HiDream.ai):从科技创新启程,绘制智能未来新篇章

在人工智能领域飞速演进的当下&#xff0c;智象未来&#xff08;HiDream.ai&#xff09;作为全球领先的多模态生成式人工智能技术供应商&#xff0c;正以其独树一帜的视觉多模态大模型及创新应用&#xff0c;推动行业趋势的前进。智象未来&#xff08;HiDream.ai&#xff09;自…

【Linux】进程信号全攻略(一)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 信号的概念 二&#xff1a;&#x1f525; 信号产生的方式 &#x1f98b; 使用键盘&#x1f98b; 系统调用函数&#x1f98b; 软件条件&#x1f98b; 进程异…

渗透利器-kali工具 (第三章-4) sqlmap之sql注入原理利用

从sql注入到sqlmap的使用 一&#xff1a;认识sql注入漏洞 1.什么是sql注入&#xff1a; 攻击者通过构造不同的sql语句来实现对数据库的操作。 2.两个关键条件&#xff1a; 1.参数用户可以控制。 2.程序原本要执行的代码&#xff0c;拼接了用户输入的数据&#xff0c;然后去执行…

npm i 的时候报错: npm ERR! Error: EPERM: operation not permitted, rename

文章目录 噩梦解决办法总结 噩梦 最近改漏洞&#xff0c;这个项目删掉了 node_modules文件夹 重新安装依赖&#xff0c;结果安装一半的时候就一直报这个错。 然后查了很多方法&#xff0c;基本都是下面这些&#xff1a; 权限不够&#xff0c;以管理员运行cmd重新安装。清除 n…

网络安全:构建坚固的数字堡垒

网络安全&#xff1a;构建坚固的数字堡垒 在当今数字化时代&#xff0c;网络安全已经成为企业和个人不可忽视的重要议题。随着互联网的普及和信息技术的快速发展&#xff0c;网络攻击、数据泄露和隐私侵犯等问题日益严重&#xff0c;给企业和个人带来了巨大的风险和损失。本文…

可选链语法在javascript和typescript中的使用详解

可选链&#xff08;Optional Chaining&#xff09;在 JavaScript 和 TypeScript 中的使用非常相似。以下是一个详细的使用案例&#xff0c;包括解释和示例代码。 使用案例 假设我们有一个用户对象&#xff0c;包含用户的个人信息和地址信息。我们希望安全地访问用户的地址信息…