1212,查询球队积分

news2024/11/28 3:44:07

查询球队积分

表: 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 分。
  • 如果球队输掉了比赛(例如,比对手少进球),就 不得分

编写解决方案,以找出每个队的 team_idteam_namenum_points

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

返回结果格式如下。

示例 1:

输入:
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             |
+------------+--------------+---------------+

数据准备

drop database if exists db_1;
create database db_1;
use db_1;;

Create table If Not Exists Teams (team_id int, team_name varchar(30));
Create table If Not Exists Matches (match_id int, host_team int, guest_team int, host_goals int, guest_goals int);
Truncate table Teams;
insert into Teams (team_id, team_name) values ('10', 'Leetcode FC');
insert into Teams (team_id, team_name) values ('20', 'NewYork FC');
insert into Teams (team_id, team_name) values ('30', 'Atlanta FC');
insert into Teams (team_id, team_name) values ('40', 'Chicago FC');
insert into Teams (team_id, team_name) values ('50', 'Toronto FC');
Truncate table Matches;
insert into Matches (match_id, host_team, guest_team, host_goals, guest_goals) values ('1', '10', '20', '3', '0');
insert into Matches (match_id, host_team, guest_team, host_goals, guest_goals) values ('2', '30', '10', '2', '2');
insert into Matches (match_id, host_team, guest_team, host_goals, guest_goals) values ('3', '10', '50', '5', '1');
insert into Matches (match_id, host_team, guest_team, host_goals, guest_goals) values ('4', '20', '30', '1', '0');
insert into Matches (match_id, host_team, guest_team, host_goals, guest_goals) values ('5', '50', '30', '1', '0');

teams 表

在这里插入图片描述

Matches 表

在这里插入图片描述

分析 + 实现

第一步:计算每一个球队作为主队的得分

-- 计算每一个球队作为主队的得分
select
    host_team team_id,
    case
        when host_goals > guest_goals then 3
        when host_goals = guest_goals then 1
        else 0
    end as num_points
from matches;

在这里插入图片描述

第二步:计算每一个球队作为客队的得分

-- 计算每一个球队作为客队的得分
select
    guest_team team_id,
    case
        when guest_goals > host_goals then 3
        when guest_goals = host_goals then 1
        else 0
    end as num_points
from matches;

在这里插入图片描述

第三步:组建临时表

-- 计算每一个球队作为主队的得分
select
    host_team team_id,
    case
        when host_goals > guest_goals then 3
        when host_goals = guest_goals then 1
        else 0
    end as num_points
from matches
union all
-- 计算每一个球队作为客队的得分
select
    guest_team team_id,
    case
        when guest_goals > host_goals then 3
        when guest_goals = host_goals then 1
        else 0
    end as num_points
from matches

在这里插入图片描述

第四步:与 teams 表 进行左连接,查询每一个球队的分数

select
    *
from teams t
left join (
-- 计算每一个球队作为主队的得分
select
    host_team team_id,
    case
        when host_goals > guest_goals then 3
        when host_goals = guest_goals then 1
        else 0
    end as num_points
from matches
union all
-- 计算每一个球队作为客队的得分
select
    guest_team team_id,
    case
        when guest_goals > host_goals then 3
        when guest_goals = host_goals then 1
        else 0
    end as num_points
from matches
) points on t.team_id = points.team_id;

在这里插入图片描述

第五步:分组聚合,求总分并排序

select
    t.team_id,
    t.team_name,
    ifnull(sum(points.num_points), 0) as num_points
from teams t
left join (
-- 计算每一个球队作为主队的得分
select
    host_team team_id,
    case
        when host_goals > guest_goals then 3
        when host_goals = guest_goals then 1
        else 0
    end as num_points
from matches
union all
-- 计算每一个球队作为客队的得分
select
    guest_team team_id,
    case
        when guest_goals > host_goals then 3
        when guest_goals = host_goals then 1
        else 0
    end as num_points
from matches
) points on t.team_id = points.team_id
group by t.team_id, t.team_name
order by num_points desc, t.team_id;

在这里插入图片描述

在这里插入图片描述

总结

多表联查

case when 语句

分组聚合

排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS 模块化设计

1.HarmonyOS 模块化设计 模块化设计文档   应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,HarmonyOs组件化的使用,有利于模块之间的解…

【WRF数据准备】地形-SRTM的3s高分辨率地形数据集

【WRF数据准备】地形-SRTM的3s高分辨率地形数据集 数据概述数据下载 数据处理合并多个SRTM 数据-GDAL库转为geogrid二进制格式WPS 中的设置 数据对比海洋区域缺省值参考 WRF中地形数据(海拔高度)分辨率最高为30s,差不多就是900 m,…

CST光子晶体微谐振腔分析和Q值提取

本期介绍基于文献[1]的一种二维光子晶体波导结构,利用路径上加微谐振腔来实现一些特殊的滤波功能。一般是要看谐振频率的变化和Q值变化,因为工艺误差或任何造成结构不规则的因素对这样细小的结构谐振来说影响非常大。下图为文献中提到的硅薄膜结构&#…

使用Jenkins持续集成的一些经验总结!

01、Performance插件兼容性问题 自由风格项目中,有使用 Performance 插件收集构建产物,但是截至到目前最新版本(Jenkins v2.298,Performance:v3.19),此插件和Jenkins都存在有兼容性问题&#x…

业余时间试一试利用AI 人工智能赚钱

内容创作与写作: 撰写文章:许多网站、博客和企业都需要大量的优质内容。利用 AI 工具如 ChatGPT 等,获取文章的思路、框架甚至初稿,然后根据自己的知识和经验进行修改、润色和完善。你可以在一些自由撰稿人平台、内容创作平台上承…

autumn是 “秋天”,year是 “年”,那autumn years是什么意思?柯桥商务剑桥英语学习外贸口语

autumn是“秋天”,year是“年”, 那你知道 autumn years 是什么意思? autumn years是什么意思? autumn years 直译为“秋天的15857575376*年”,但这样的理解并不准确,《剑桥辞典》中对这个词组的英文解释…

如何评估检索增强型生成(RAG)应用

RAG,也就是检索增强型生成,是现在大型语言模型(LLMs)时代里的一个超火的AI框架,比如你知道的ChatGPT。它通过把外面的知识整合进来,让这些模型变得更聪明,能给出更准确、更及时的回答。详见前篇…

[WiFi] Wi-Fi HaLow: IEEE 802.11ah 无线网络协议介绍

参考链接 802.11ah(HaLow)协议解析1:协议简介 - 知乎 802.11ah(HaLow)协议解析3:物理层改进 - 知乎 Wi-Fi HaLow: IEEE 802.11ah Wireless Networking Protocol - IoTEDU Wi-Fi CERTIFIED HaLow | Wi-F…

实现iOS Framework生成全流程详解

引言 在iOS开发中,Framework是实现代码复用和模块化开发的有效手段。它不仅可以将复杂的功能封装为独立的组件,还能提升代码的可维护性和可扩展性。Framework的广泛应用使得我们可以轻松地集成第三方库,或将自己的功能打包分发给团队成员使用…

CF351E Jeff and Permutation 题解

#1024程序员节|征文# 人生中的第一道紫题。。。 ​​​​​​题目传送门 解题思路 首先我们可以得到读入时 的正负不影响答案,因为我们可以进行一次操作将它们变成它们的相反数,从而使其变成原数,因此,我们可以将…

项目篇--Maven+Idea+ PrimeFaces+Jsf--项目搭建

文章目录 前言一、PrimeFaces 和 Jsf:1.1 JSF 基础:1.2 PrimeFaces 扩展: 二、项目搭建:2.1 Maven 项目的创建:2 xml 配置:2.1 pom.xml 配置2.2web.xml 配置: 2.3 代码:2.3.1 页面&a…

(六)STM32F407 cubemx MPU6050通讯硬件寄存器配置部分(2)

这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列MPU6050通讯硬件寄…

Redis学习笔记(六)--Redis底层数据结构之集合的实现原理

文章目录 一、两种实现的选择二、ziplist1、head2、entries3、end 三、listPack1、head2、entries3、end 四、skipList1、skipList原理2、存在的问题3、算法优化 五、quickList1、检索操作2、插入操作3、删除操作 六、key与value中元素的数量 本文参考: Redis学习汇…

从天边的北斗到身边的北斗 —— 探索北斗导航系统的非凡之旅

引言:穿越时空的导航奇迹 在浩瀚的夜空之中,北斗七星以其独特的排列,自古以来便是指引方向的天文坐标。而今,这份古老的智慧与现代科技完美融合,化作了覆盖全球的卫星导航系统——中国北斗。从遥远的星河到触手可及的…

不考虑光影、背景、装饰,你的可视化大屏摆脱不了平淡。

如果在可视化大屏的设计中不考虑光影、背景和装饰,确实难以摆脱平淡。光影效果可以为大屏增添立体感和层次感,吸引观众的注意力。 合适的背景能营造出特定的氛围,使数据展示更具情境感。而装饰元素则可以起到点缀和美化的作用,提…

【无标题】unity, 在编辑界面中隐藏公开变量和现实私有变量

1.unity, 在编辑界面中隐藏公开变量 [HideInInspector]public int Num; 2.[SerializeField]反序列化显示私有变量 SerializeField是Unity引擎中的一个特性,用于使私有变量在Inspector中可见并可编辑 [SerializeField] private int time; 实例效果如下图示&…

Xshell删除键不好使:删除显示退格^H

1、问题: Xshell不能删除,删除时出现 退格^H 2、解决方案: 点击上方:文件→属性→终端→键盘,把 delete 和 backspace 序列改为 ASCII 127即可。如下所示: 3、重启Xshell,即可以删除了。

UE5 射线折射

这个判断是否有标签是需要带有此标签的Actor来反射

基础知识 main函数形参 C语言

main函数完整的函数头:int main(int argc,char *argv[]) 或 int main(int argc,char **argv)arg-----argument参数c -----count个数v -----value值、内容 假设命令行上运行一个程序的命令如下:./test abc def 123 则test这个程序的main函数第一个…

论当前的云计算

随着技术的不断进步和数字化转型的加速,云计算已经成为当今信息技术领域的重要支柱。本文将探讨当前云计算的发展现状、市场趋势、技术革新以及面临的挑战与机遇。 云计算的发展现状 云计算,作为一种通过网络提供可伸缩的、按需分配的计算资源服务模式&a…