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 竞标赛优胜者相关推荐

  1. Leetcode力扣 MySQL数据库 1264 页面推荐

    1264 页面推荐 SQL架构 Create table If Not Exists Friendship_1264 (user1_id int, user2_id int); Create tabl ...

  2. Leetcode力扣 MySQL数据库 1468 计算税后工资

    1468 计算税后工资 SQL架构 Create table If Not Exists Salaries_1468 (company_id int, employee_id int, employe ...

  3. Leetcode力扣 MySQL数据库 574 当选者

    574 当选者 SQL架构 Create table If Not Exists Candidate_574 (id int, Name varchar(255)); Create table If ...

  4. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  5. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  6. 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java

    <LeetCode力扣练习>第96题 不同的二叉搜索树 Java 一.资源 题目: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回 ...

  7. 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java

    <LeetCode力扣练习>剑指 Offer 28. 对称的二叉树 Java 一.资源 题目: 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的 ...

  8. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  9. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java

    <LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...

  10. 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java

    <LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...

最新文章

  1. 在visual studio 2010中调用ffmpeg
  2. Linux上端口开放常用命令
  3. lgg6可以root的版本_Kali Linux 2020.1版本变更内容
  4. linux vnc检查,检查Ubuntu VNC设置(避免远程登陆)
  5. Java基础语法之变量作用域、小大驼峰命名规则和java运算符(赋值、关系、三元、逻辑运算符)
  6. python3.14_leetcode-python3-14. 最长公共前缀
  7. 用NE555的延时电路
  8. webpack5 入门学习笔记(四)性能优化
  9. 相机的内参会改变吗_关于相机内参中的焦距fx和fy
  10. 教室计算机英语怎么读,教室英文怎么读?
  11. [3DsMAX]建模软件的分享
  12. 网易我的世界服务器光影文件夹在哪,我的世界光影设置在哪
  13. agc004E Salvage Robots
  14. linux mysql insert into_MySQL的INSERT语句小结
  15. 世界读书日:作为一个优秀的程序员请收藏这份书单
  16. JDBC通过Statement执行查询操作
  17. 【Python】春节炫酷烟花秀
  18. 安装屏保软件(Linux终端演示 “黑客帝国” 字母雨界面)和Linux修改管理员密码
  19. pde与波长 sipm 关系_硅光电倍增管
  20. 华为平板m3不升级鸿蒙,【简讯】AMD Zen4最新消息:IPC提升20%;realme徐起:手机市场下半年必迎涨价潮…...

热门文章

  1. matlab的句柄 图形对象 gca gco gcf set get
  2. 使用esp32-s2模拟实现usb多点触摸
  3. bartender各个版本下载链接(10.1\2016\2019)
  4. C++扫描指定主机开放的端口
  5. 13.0、veu-路由嵌套
  6. word插入分隔符的方法
  7. N2O游戏大师 V2.36.75.803 官方安装版
  8. VMware网络配置基础
  9. pgMP认证,还是再看看吧!
  10. seo公司,杭州谷歌seo公司