Leetcode力扣 MySQL数据库 1194 竞标赛优胜者
1194 竞标赛优胜者
SQL架构
Create table If Not Exists Players_1194 (player_id int, group_id int);
Create table If Not Exists Matches_1194 (match_id int, first_player int, second_player int, first_score int, second_score int);
Truncate table Players_1194;
insert into Players_1194 (player_id, group_id) values ('10', '2');
insert into Players_1194 (player_id, group_id) values ('15', '1');
insert into Players_1194 (player_id, group_id) values ('20', '3');
insert into Players_1194 (player_id, group_id) values ('25', '1');
insert into Players_1194 (player_id, group_id) values ('30', '1');
insert into Players_1194 (player_id, group_id) values ('35', '2');
insert into Players_1194 (player_id, group_id) values ('40', '3');
insert into Players_1194 (player_id, group_id) values ('45', '1');
insert into Players_1194 (player_id, group_id) values ('50', '2');
Truncate table Matches_1194;
insert into Matches_1194 (match_id, first_player, second_player, first_score, second_score) values ('1', '15', '45', '3', '0');
insert into Matches_1194 (match_id, first_player, second_player, first_score, second_score) values ('2', '30', '25', '1', '2');
insert into Matches_1194 (match_id, first_player, second_player, first_score, second_score) values ('3', '30', '15', '2', '0');
insert into Matches_1194 (match_id, first_player, second_player, first_score, second_score) values ('4', '40', '20', '5', '2');
insert into Matches_1194 (match_id, first_player, second_player, first_score, second_score) values ('5', '35', '50', '1', '1');
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 最小 的选手获胜。
编写一个 SQL 查询来查找每组中的获胜者。
查询结果格式如下所示
Players 表:
+-----------+------------+
| player_id | group_id |
+-----------+------------+
| 15 | 1 |
| 25 | 1 |
| 30 | 1 |
| 45 | 1 |
| 10 | 2 |
| 35 | 2 |
| 50 | 2 |
| 20 | 3 |
| 40 | 3 |
+-----------+------------+
Matches 表:
+------------+--------------+---------------+-------------+--------------+
| match_id | first_player | second_player | first_score | second_score |
+------------+--------------+---------------+-------------+--------------+
| 1 | 15 | 45 | 3 | 0 |
| 2 | 30 | 25 | 1 | 2 |
| 3 | 30 | 15 | 2 | 0 |
| 4 | 40 | 20 | 5 | 2 |
| 5 | 35 | 50 | 1 | 1 |
+------------+--------------+---------------+-------------+--------------+
Result 表:
+-----------+------------+
| group_id | player_id |
+-----------+------------+
| 1 | 15 |
| 2 | 35 |
| 3 | 40 |
+-----------+------------+
解题
1
select first_player player_id, first_score score from matches_1194
union all
select second_player, second_score from matches_1194;
2 统计每个人得分
SELECT player_id,SUM(score) sum_score
FROM(select first_player player_id, first_score score from matches_1194union allselect second_player, second_score from matches_1194) t
GROUP BY player_id;SELECT group_id, t1.player_id, ROW_NUMBER() over(partition by group_id ORDER BY sum_score desc, t1.player_id) rk
FROM t1 join players_1194 t2 on t1.player_id = t2.player_id;
3 窗口函数
with t1 AS
(SELECT player_id,SUM(score) sum_scoreFROM(select first_player player_id, first_score score from matches_1194union allselect second_player, second_score from matches_1194) tGROUP BY player_id
),t3 AS
(SELECT group_id, t1.player_id, ROW_NUMBER() over(partition by group_id ORDER BY sum_score desc, t1.player_id) rkFROM t1 join players_1194 t2 on t1.player_id = t2.player_id
)
SELECT group_id,player_id FROM t3 WHERE rk = 1;
Leetcode力扣 MySQL数据库 1194 竞标赛优胜者相关推荐
- Leetcode力扣 MySQL数据库 1264 页面推荐
1264 页面推荐 SQL架构 Create table If Not Exists Friendship_1264 (user1_id int, user2_id int); Create tabl ...
- Leetcode力扣 MySQL数据库 1468 计算税后工资
1468 计算税后工资 SQL架构 Create table If Not Exists Salaries_1468 (company_id int, employee_id int, employe ...
- Leetcode力扣 MySQL数据库 574 当选者
574 当选者 SQL架构 Create table If Not Exists Candidate_574 (id int, Name varchar(255)); Create table If ...
- 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
<LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...
- 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java
<LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...
- 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java
<LeetCode力扣练习>第96题 不同的二叉搜索树 Java 一.资源 题目: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回 ...
- 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java
<LeetCode力扣练习>剑指 Offer 28. 对称的二叉树 Java 一.资源 题目: 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的 ...
- 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java
<LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...
- 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java
<LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...
- 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java
<LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...
最新文章
- 在visual studio 2010中调用ffmpeg
- Linux上端口开放常用命令
- lgg6可以root的版本_Kali Linux 2020.1版本变更内容
- linux vnc检查,检查Ubuntu VNC设置(避免远程登陆)
- Java基础语法之变量作用域、小大驼峰命名规则和java运算符(赋值、关系、三元、逻辑运算符)
- python3.14_leetcode-python3-14. 最长公共前缀
- 用NE555的延时电路
- webpack5 入门学习笔记(四)性能优化
- 相机的内参会改变吗_关于相机内参中的焦距fx和fy
- 教室计算机英语怎么读,教室英文怎么读?
- [3DsMAX]建模软件的分享
- 网易我的世界服务器光影文件夹在哪,我的世界光影设置在哪
- agc004E Salvage Robots
- linux mysql insert into_MySQL的INSERT语句小结
- 世界读书日:作为一个优秀的程序员请收藏这份书单
- JDBC通过Statement执行查询操作
- 【Python】春节炫酷烟花秀
- 安装屏保软件(Linux终端演示 “黑客帝国” 字母雨界面)和Linux修改管理员密码
- pde与波长 sipm 关系_硅光电倍增管
- 华为平板m3不升级鸿蒙,【简讯】AMD Zen4最新消息:IPC提升20%;realme徐起:手机市场下半年必迎涨价潮…...