leetcode-SQL-1783. 大满贯数量

简介: leetcode-SQL-1783. 大满贯数量

题目

题目链接

表:Players

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| player_id      | int     |
| player_name    | varchar |
+----------------+---------+
player_id 是这个表的主键
这个表的每一行给出一个网球运动员的 ID 和 姓名

表:Championships

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| year          | int     |
| Wimbledon     | int     |
| Fr_open       | int     |
| US_open       | int     |
| Au_open       | int     |
+---------------+---------+
year 是这个表的主键
该表的每一行都包含在每场大满贯网球比赛中赢得比赛的球员的 ID

请写出查询语句,查询出每一个球员赢得大满贯比赛的次数。结果不包含没有赢得比赛的球员的ID 。

结果集 无顺序要求 。

查询结果的格式,如下所示。

示例 1:

输入:
Players 表:
+-----------+-------------+
| player_id | player_name |
+-----------+-------------+
| 1         | Nadal       |
| 2         | Federer     |
| 3         | Novak       |
+-----------+-------------+
Championships 表:
+------+-----------+---------+---------+---------+
| year | Wimbledon | Fr_open | US_open | Au_open |
+------+-----------+---------+---------+---------+
| 2018 | 1         | 1       | 1       | 1       |
| 2019 | 1         | 1       | 2       | 2       |
| 2020 | 2         | 1       | 2       | 2       |
+------+-----------+---------+---------+---------+
输出:
+-----------+-------------+-------------------+
| player_id | player_name | grand_slams_count |
+-----------+-------------+-------------------+
| 2         | Federer     | 5                 |
| 1         | Nadal       | 7                 |
+-----------+-------------+-------------------+
解释:
Player 1 (Nadal) 获得了 7 次大满贯:其中温网 2 次(2018, 2019), 法国公开赛 3 次 (2018, 2019, 2020), 美国公开赛 1 次 (2018)以及澳网公开赛 1 次 (2018) 。
Player 2 (Federer) 获得了 5 次大满贯:其中温网 1 次 (2020), 美国公开赛 2 次 (2019, 2020) 以及澳网公开赛 2 次 (2019, 2020) 。
Player 3 (Novak)  没有赢得,因此不包含在结果集中。

解题

方法一:

1.将Championships表行转成列

2.统计每个id的人冠军次数

3.用内联结,获得结果

select 
    p.player_id,
    p.player_name,
    c.grand_slams_count
from Players as p
inner join(
    select id,count(*) as grand_slams_count
    from (
        select Wimbledon as id
        from Championships
        union all
        select Fr_open as id
        from Championships
        union all
        select US_open as id
        from Championships
        union all
        select Au_open as id
        from Championships
    )as b
    group by id
)as c
on p.player_id=c.id;

方法二:

innner join不加,连结on关键字,就是求笛卡尔积

这种效率相比方法一会低一点

select
    p.player_id,
    p.player_name,
    sum(
        (case when c.Wimbledon=p.player_id then 1 else 0 end)+
        (case when c.Fr_open=p.player_id then 1 else 0 end)+
        (case when c.US_open=p.player_id then 1 else 0 end)+
        (case when c.Au_open=p.player_id then 1 else 0 end)
    )as grand_slams_count
from Championships as c
inner join Players as p
group by p.player_id
having grand_slams_count<>0;
相关文章
|
安全 Java API
阿里云——Java实现手机短信验证码功能
通过手机短信发送验证码,是最普遍、最安全验证用户真实身份的方式。目前,短信验证码广泛应用于用户注册、密码找回、登录保护、身份认证、随机密码、交易确认等应用场景。本文通过调用API开发一个短信验证码为例,带您了解如何实现短信验证码功能。
8696 7
阿里云——Java实现手机短信验证码功能
解决异常 java.net.URISyntaxException: Illegal character in query at index
解决异常 java.net.URISyntaxException: Illegal character in query at index
1596 0
|
Java Spring
成功解决Initialization failed for ‘https://start.spring.io‘ Please check URL, network and proxy settings
这篇文章提供了解决Spring Initializr网站初始化失败问题的方法,包括检查URL、网络和代理设置。
成功解决Initialization failed for ‘https://start.spring.io‘ Please check URL, network and proxy settings
成功解决:CentOS7中无法连接网络
这篇文章介绍了如何解决CentOS 7虚拟机无法连接网络的问题。作者猜测问题可能是由于虚拟机软件的网关和CentOS 7系统的网关不一致导致的。文章提供了两种解决方案:修改虚拟网络编辑器的网关或修改CentOS系统的网关和IP地址。作者选择了后者,并演示了如何在CentOS终端中以root用户身份修改IP和网关。
成功解决:CentOS7中无法连接网络
|
Windows
全网超详细的【Axure】Axure RP 9的下载、安装、中文字体、授权
全网超详细的【Axure】Axure RP 9的下载、安装、中文字体、授权
1192 0
全网超详细的【Axure】Axure RP 9的下载、安装、中文字体、授权
|
Cloud Native 架构师 测试技术
如何画好一张架构图?(内含知识图谱)
架构图是什么?为什么要画架构图?如何画好架构图?有哪些方法?本文从架构的定义说起,分享了阿里文娱高级技术专家箫逸关于画架构图多年的经验总结,并对抽象这一概念进行了深入地讨论。内容较长,同学们可收藏起来细细阅读。
15331 0
如何画好一张架构图?(内含知识图谱)
|
Java Spring
Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings.
Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings.
1509 0
|
JavaScript 前端开发 Java
SpringBoot + Vue 前后端分离项目部署到服务器上
SpringBoot + Vue 前后端分离项目部署到服务器上
999 0
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_106 查找成绩处于中游的学生
「SQL面试题库」 No_106 查找成绩处于中游的学生