• 1212. 查询球队积分


    SQL架构

    表: Teams

    +---------------+----------+
    | Column Name   | Type     |
    +---------------+----------+
    | team_id       | int      |
    | team_name     | varchar  |
    +---------------+----------+
    此表的主键是 team_id。
    表中的每一行都代表一支独立足球队。
    

    表: Matches

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | match_id      | int     |
    | host_team     | int     |
    | guest_team    | int     | 
    | host_goals    | int     |
    | guest_goals   | int     |
    +---------------+---------+
    此表的主键是 match_id。
    表中的每一行都代表一场已结束的比赛。
    比赛的主客队分别由它们自己的 id 表示,他们的进球由 host_goals 和 guest_goals 分别表示。
    

    您希望在所有比赛之后计算所有球队的比分。积分奖励方式如下:

    • 如果球队赢了比赛(即比对手进更多的球),就得 3 分。
    • 如果双方打成平手(即,与对方得分相同),则得 1 分。
    • 如果球队输掉了比赛(例如,比对手少进球),就 不得分 。

    写出一条SQL语句以查询每个队的 team_idteam_name 和 num_points

    返回的结果根据 num_points 降序排序,如果有两队积分相同,那么这两队按 team_id  升序排序

    查询结果格式如下。

    示例 1:

    1. 输入:
    2. Teams
    table: +-----------+--------------+ | team_id | team_name | +-----------+--------------+ | 10 | Leetcode FC | | 20 | NewYork FC | | 30 | Atlanta FC | | 40 | Chicago FC | | 50 | Toronto FC | +-----------+--------------+ Matches table: +------------+--------------+---------------+-------------+--------------+ | match_id | host_team | guest_team | host_goals | guest_goals | +------------+--------------+---------------+-------------+--------------+ | 1 | 10 | 20 | 3 | 0 | | 2 | 30 | 10 | 2 | 2 | | 3 | 10 | 50 | 5 | 1 | | 4 | 20 | 30 | 1 | 0 | | 5 | 50 | 30 | 1 | 0 | +------------+--------------+---------------+-------------+--------------+ 输出: +------------+--------------+---------------+ | team_id | team_name | num_points | +------------+--------------+---------------+ | 10 | Leetcode FC | 7 | | 20 | NewYork FC | 3 | | 50 | Toronto FC | 3 | | 30 | Atlanta FC | 1 | | 40 | Chicago FC | 0 | +------------+--------------+---------------+

    union all: 

    1. select
    2. t.team_id,t.team_name,ifnull(sss1.num_points,0) num_points
    3. from
    4. Teams t left join
    5. (
    6. select
    7. team_id,sum(num_points) num_points
    8. from
    9. (
    10. select
    11. host_team team_id,sum(case
    12. when host_goals > guest_goals then 3
    13. when host_goals = guest_goals then 1
    14. when host_goals < guest_goals then 0
    15. end) num_points
    16. from
    17. Matches
    18. group by
    19. match_id
    20. union all
    21. select
    22. guest_team team_id,sum(case
    23. when host_goals > guest_goals then 0
    24. when host_goals = guest_goals then 1
    25. when host_goals < guest_goals then 3
    26. end) num_points
    27. from
    28. Matches
    29. group by
    30. match_id
    31. ) ss1
    32. group by
    33. team_id
    34. )sss1
    35. on t.team_id = sss1.team_id
    36. order by
    37. num_points desc,team_id

     

    if 嵌套 :

    1. select
    2. team_id, team_name,ifnull(sum(if(team_id=host_team,host_score,guest_score)),0) as num_points
    3. from Teams m
    4. left join
    5. (
    6. select host_team, guest_team,
    7. if(host_goals<guest_goals,0,if(host_goals>guest_goals,3,1)) as host_score,
    8. if(host_goals<guest_goals,3,if(host_goals>guest_goals,0,1)) as guest_score
    9. from Matches) t
    10. on m.team_id = t.host_team or m.team_id = t.guest_team
    11. group by team_id
    12. order by num_points desc, team_id

  • 相关阅读:
    ngrok内网穿透
    后端学习笔记:Python基础
    LeetBook 刷题笔记:链表(三)
    软件测试 -- 进阶 3 软件测试设计
    AI顶会ICLR‘23作者竟让审稿人重读幼儿园? 大会主席强硬回复!
    前后端联调出现跨域问题,springboot的解决方案
    JVM学习(三)-- 垃圾回收
    CNN中添加HOG特征的pytorch实现——基于Alexnet
    甘露糖-聚乙二醇-羧酸|mannose-PEG-COOH|羧酸-PEG-甘露糖
    牛客刷题总结——Python入门08:面向对象、正则表达式
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125452201