• 1194. 锦标赛优胜者


    SQL架构

    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 查询来查找每组中的获胜者。

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

    查询结果格式如下所示。

    示例 1:

    1. 输入:
    2. 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 | +------------+--------------+---------------+-------------+--------------+ 输出: +-----------+------------+ | group_id | player_id | +-----------+------------+ | 1 | 15 | | 2 | 35 | | 3 | 40 | +-----------+------------+
    1. # Write your MySQL query statement below
    2. select
    3. group_id GROUP_ID,player_id PLAYER_ID
    4. from
    5. (
    6. select
    7. p.group_id,p.player_id,rank() over(partition by group_id order by ss1.sum_score desc,ss1.player_id) r #按组给每个球员编号 编号顺序为 组内累积得分最高的选手。如果平局,player_id 最小 的选手 5
    8. from
    9. Players p left join
    10. (
    11. select
    12. player_id,sum(score) sum_score #求出每个球员的总分 4
    13. from
    14. (
    15. select
    16. first_player player_id,first_score score#选出 所有 first_player 的 分数(first_score) 1
    17. from
    18. Matches
    19. union all #上下俩表用 union all 拼接 就是 所有 球员的 分数(此时没有求 每个球员的总分) 3
    20. select
    21. second_player player_id,second_score score#选出 所有 second_player 的 分数(second_score) 2
    22. from
    23. Matches
    24. ) s1
    25. group by player_id
    26. ) ss1
    27. on p.player_id = ss1.player_id
    28. ) sss1
    29. where
    30. sss1.r=1 #选出标号为1 的球员 就是 题中答案

  • 相关阅读:
    windows+python实现自动化部署
    Linux:redis的基础操作
    投影仪假1080P和真1080P的差别,4000元价位真1080P投影仪推荐
    Python 函数用法和底层分析
    HP惠普暗影精灵10 OMEN Gaming Laptop 16-wf1xxx原厂Win11系统镜像下载
    Go 语言之 Json 解析,正则表达式,从数据库导出 CSV 文件代码示例
    koa框架(二) mvc 模式及实现一个koa框架的web服务
    1034 Head of a Gang
    Matlab:运算符和字符
    算法 二叉树的遍历(迭代法/递归法)
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125430444