• 1194. 锦标赛优胜者


    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。
    第一个玩家和第二个玩家的分数分别包含第一个玩家和第二个玩家的分数。
    你可以假设,在每一场比赛中,球员都属于同一组。
    

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

    编写一个 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         |
    +-----------+------------+

    先通过一次关联查询把每组每个player的总分查出来,再通过一次查询得到每组得分最高的,得分一样的取id最小的

    select group_id,player_id from
    (select group_id,player_id,sum((
    case when player_id = first_player then first_score
    when player_id = second_player then second_score
    end
    )) as totalScores
    from Players p,Matches m
    where p.player_id = m.first_player
    or p.player_id = m.second_player
    group by group_id,player_id
    order by group_id,totalScores desc,player_id) as temp
    group by group_id
    order by group_id,totalScores desc,player_id

    作者:couchpotato613
    链接:https://leetcode-cn.com/problems/tournament-winners/solution/guan-lian-cha-xun-jia-shang-fen-zu-pai-xu-by-couch/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Windows服务的删除与添加
    综合布线施工规范与工艺
    电表产品型号代表什么意义?
    网线接线顺序
    电机绝缘电阻的测量方法
    实用电工口诀
    电工需熟知应用口诀-巧用低压验电笔
    各种工业以太网比较(EtherCAT,EtherNet/IP,ProfiNet,Modbus-TCP,Powerlink)
    C# 开启线程的几种方式
    C# 内置的类型转换方法
  • 原文地址:https://www.cnblogs.com/leeeee/p/11902014.html
Copyright © 2020-2023  润新知