文章目录

  • 1. 题目
  • 2. 解题

1. 题目

Players 玩家表

+-------------+-------+
| Column Name | Type  |
+-------------+-------+
| player_id   | int   |
| group_id    | int   |
+-------------+-------+
玩家 ID 是此表的主键。
此表的每一行表示每个玩家的组。

Matches 赛事表

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| match_id      | int     |
| first_player  | int     |
| second_player | int     |
| first_score   | int     |
| second_score  | int     |
+---------------+---------+
match_id 是此表的主键。
每一行是一场比赛的记录,第一名和第二名球员包含每场比赛的球员 ID。
第一个玩家和第二个玩家的分数分别包含第一个玩家和第二个玩家的分数。
你可以假设,在每一场比赛中,球员都属于同一组。

每组的获胜者是在组内得分最高的选手。
如果平局,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         |
+-----------+------------+

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/tournament-winners
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先把分数加起来
select player_id, sum(score) total_score
from
((select first_player player_id, first_score scorefrom Matches)union all(select second_player, second_scorefrom Matches)
) t1
group by player_id
{"headers": ["player_id", "total_score"],
"values": [[15, 3], [30, 3], [40, 5], [35, 1], [45, 0], [25, 2], [20, 2], [50, 1]]}
  • 左连接获取 分组id
  • 窗口函数获取 组内排名
select group_id, player_id,rank() over(partition by group_id order by total_score desc, player_id) rnk
from
(select group_id, t2.player_id, total_scorefrom Players p left join(select player_id, sum(score) total_scorefrom((select first_player player_id, first_score scorefrom Matches)union all(select second_player, second_scorefrom Matches)) t1group by player_id) t2using(player_id)
) t3
  • 取出排名为1的
# Write your MySQL query statement belowselect group_id, player_id
from
(select group_id, player_id,rank() over(partition by group_id order by total_score desc, player_id) rnkfrom(select group_id, t2.player_id, total_scorefrom Players p left join(select player_id, sum(score) total_scorefrom((select first_player player_id, first_score scorefrom Matches)union all(select second_player, second_scorefrom Matches)) t1group by player_id) t2using(player_id)) t3
) t
where rnk = 1

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode MySQL 1194. 锦标赛优胜者相关推荐

  1. LeetCode MySQL解题目录

    已完成的 LeetCode MySQL 数据库题目.点击查看我的 LeetCode 算法解题目录. 已解决 123/123 - 简单 54 中等 51 困难 18 前置入门学习 MySQL 基本查询. ...

  2. LeetCode MySQL 1308. 不同性别每日分数总计(累加/变量/窗口函数)

    文章目录 1. 题目 2. 解题 1. 题目 表: Scores +---------------+---------+ | Column Name | Type | +--------------- ...

  3. LeetCode MySQL 1853. 转换日期格式(日期格式化)

    文章目录 1. 题目 2. 解题 1. 题目 表: Days +-------------+------+ | Column Name | Type | +-------------+------+ ...

  4. LeetCode MySQL 1821. 寻找今年具有正收入的客户

    文章目录 1. 题目 2. 解题 1. 题目 表:Customers +--------------+------+ | Column Name | Type | +--------------+-- ...

  5. LeetCode MySQL 1667. 修复表中的名字

    文章目录 1. 题目 2. 解题 1. 题目 表: Users +----------------+---------+ | Column Name | Type | +--------------- ...

  6. LeetCode MySQL 1587. 银行账户概要 II

    文章目录 1. 题目 2. 解题 1. 题目 表: Users +--------------+---------+ | Column Name | Type | +--------------+-- ...

  7. LeetCode MySQL 1873. 计算特殊奖金(case when then else end)

    文章目录 1. 题目 2. 解题 1. 题目 表: Employees +-------------+---------+ | 列名 | 类型 | +-------------+---------+ ...

  8. LeetCode MySQL 1890. 2020年最后一次登录(year)

    文章目录 1. 题目 2. 解题 1. 题目 表: Logins +----------------+----------+ | 列名 | 类型 | +----------------+------- ...

  9. LeetCode MySQL 1777. 每家商店的产品价格(行列转换)

    文章目录 1. 题目 2. 解题 1. 题目 表:Products +-------------+---------+ | Column Name | Type | +-------------+-- ...

最新文章

  1. 基于SSM实现图书管理系统
  2. mysql 5.6 gtid mha_MySQL MHA--故障切换模式(GTID模式和非GTID模式)
  3. Go语言封装Http协议GET和POST请求
  4. Linux脚本:xjps查看各个节点java进程
  5. python的gui库_tkinter——python的GUI标准库
  6. Verilog HDL中容易生成锁存器的两种情况
  7. Idea的一些调试技巧及设置todo
  8. Oracle 自带sqldeveloper导入数据到表
  9. pycharm 如何自动添加头注释,比如时间,作者信息等
  10. 【知了堂学习笔记】数据库连接池简介,以及Eclipse中C3p0连接池的简单运用
  11. dropdownlist三级联动怎么实现_简单三步,轻松搞定一级、二级、三级下拉菜单
  12. BitOffer携手高盛推出保本保息量化基金,无风险年化收益20%
  13. JAVA j2se面试题
  14. GEE-Python遥感大数据分析、管理与可视化实践技术应用
  15. Android app性能优化解决卡慢顿之布局优化
  16. anmate.css怎么用,animate.css使用方法是什么
  17. Arduino接入DFrobot EasyIOT实验(Arduino+APP Inventor+EasyIOT+百度AI API+Python数据可视化)
  18. 仿云音乐黑胶唱片功能
  19. 微信输入15个句号手机会崩溃?这5种方法挽救你的聊天记录!
  20. Postfix 故障解决一例

热门文章

  1. 哈希表思路图解和代码实现
  2. 单例设计模式-懒汉式(线程不安全)
  3. android防谷歌滑动效果,谷歌是如何做到这一点的?在Android应用程序中滑动ActionBar...
  4. Makefile中三个自动变量$^,$@,$
  5. 一些自己编写的字符串操作函数
  6. python给定一个整数n、判断n是否为素数_输入一个大于3的整数n,判断它是否为素数...
  7. 每日一题 Day8:CodeForces-996A.Hit the Lottery(贪心)
  8. html5手机移动端三级联动城市选择器
  9. 【bzoj1738】[Usaco2005 mar]Ombrophobic Bovines 发抖的牛 Floyd+二分+网络流最大流
  10. android简单的夜间模式