leetcode 1811 寻找面试候选人(postgresql)

embedded/2024/9/23 11:42:37/

需求

表: Contests

±-------------±-----+
| Column Name | Type |
±-------------±-----+
| contest_id | int |
| gold_medal | int |
| silver_medal | int |
| bronze_medal | int |
±-------------±-----+
contest_id 是该表的主键.
该表包含LeetCode竞赛的ID和该场比赛中金牌、银牌、铜牌的用户id。
可以保证,所有连续的比赛都有连续的ID,没有ID被跳过。

Table: Users

±------------±--------+
| Column Name | Type |
±------------±--------+
| user_id | int |
| mail | varchar |
| name | varchar |
±------------±--------+
user_id 是该表的主键.
该表包含用户信息。

编写 SQL 语句来返回 所有面试候选人 的姓名 name 和邮件 mail 。当用户满足以下两个要求中的 任意一条 ,其成为 面试候选人 :

该用户在 连续三场及更多 比赛中赢得 任意 奖牌。
该用户在 三场及更多不同的 比赛中赢得 金牌(这些比赛可以不是连续的)
可以以 任何顺序 返回结果。

查询结果格式如下例所示。

示例 1:

输入:
Contests表:
±-----------±-----------±-------------±-------------+
| contest_id | gold_medal | silver_medal | bronze_medal |
±-----------±-----------±-------------±-------------+
| 190 | 1 | 5 | 2 |
| 191 | 2 | 3 | 5 |
| 192 | 5 | 2 | 3 |
| 193 | 1 | 3 | 5 |
| 194 | 4 | 5 | 2 |
| 195 | 4 | 2 | 1 |
| 196 | 1 | 5 | 2 |
±-----------±-----------±-------------±-------------+
Users表:
±--------±-------------------±------+
| user_id | mail | name |
±--------±-------------------±------+
| 1 | sarah@leetcode.com | Sarah |
| 2 | bob@leetcode.com | Bob |
| 3 | alice@leetcode.com | Alice |
| 4 | hercy@leetcode.com | Hercy |
| 5 | quarz@leetcode.com | Quarz |
±--------±-------------------±------+
输出:
±------±-------------------+
| name | mail |
±------±-------------------+
| Sarah | sarah@leetcode.com |
| Bob | bob@leetcode.com |
| Alice | alice@leetcode.com |
| Quarz | quarz@leetcode.com |
±------±-------------------+
解释:
Sarah 赢得了3块金牌 (190, 193, and 196),所以我们将她列入结果表。
Bob在连续3场竞赛中赢得了奖牌(190, 191, and 192), 所以我们将他列入结果表。
- 注意他在另外的连续3场竞赛中也赢得了奖牌(194, 195, and 196).
Alice在连续3场竞赛中赢得了奖牌 (191, 192, and 193), 所以我们将她列入结果表。
Quarz在连续5场竞赛中赢得了奖牌(190, 191, 192, 193, and 194), 所以我们将他列入结果表。

进阶:

如果第一个条件变成“该用户在连续 n 场及比赛中赢得任意奖牌。”呢?你如何更改你的解法,来选出面试候选人?可以把 n 想象成存储过程中的参数。
有的用户可能没有参加每一场竞赛,但是在参加的每一场竞赛中都表现得不错。你如何更改你的解法,以达到只考虑那些 用户参与了的 比赛?可假设另一张表给出了每场比赛的注册用户信息。

输入

在这里插入图片描述

输出

sql">with t1 as (
-- 获得三块及以上的金牌的用户
select gold_medal as medal
from contests
group by gold_medal
having count(1)>=3
),t2 as (
select contest_id,gold_medal as medal
from contests
union all
select contest_id,silver_medal as medal
from contests
union all
select contest_id,bronze_medal as medal
from contests
order by medal,contest_id
),t3 as (
select *,(contest_id-(row_number() over (partition by medal order by contest_id))) as rn1
from t2
),t4 as (
select distinct medal
from t3
group by rn1,medal
having count(1)>=3
union all
select * from t1
)
select name,mail
from users,t4
where user_id=medal;

在这里插入图片描述


http://www.ppmy.cn/embedded/110671.html

相关文章

【Android】NestedScrollView的简单用法与滚动冲突、滑动冲突

一、NestedScrollView 1. 什么是 NestedScrollView NestedScrollView 是 Android 中一个用于处理垂直方向滚动的布局组件,它继承自 FrameLayout,同时支持嵌套滑动(Nested Scrolling)机制。相比于传统的 ScrollView,N…

webpack5-手撸RemoveConsolePlugin插件

写在前面 其实呢,这个东西也就那样,主要是我们得清楚webpack构建过程中的生命周期钩子, 就拿这个插件来说,我们想要把输出的js文件里面的内容中的console语句去掉,那么我们就需要找到webpack处理完文件时的钩子&#…

分库分表:应对大数据量挑战的数据库扩展策略

随着互联网技术的发展,数据量的爆炸性增长给数据库系统带来了前所未有的挑战。为了有效管理大规模数据并保持高性能,分库分表成为了一种常见的数据库扩展策略。本文将探讨分库分表的概念、动机、实施策略以及潜在的挑战和解决方案。 什么是分库分表&…

【FastAPI】离线使用Swagger UI 或 国内网络如何快速加载Swagger UI

在FastAPI中,默认情况下,当应用启动时,Swagger UI 会通过在线加载 Swagger UI 的静态资源。这意味着如果应用运行在没有互联网连接的环境中,默认的 Swagger 文档页面将无法加载。 为了在离线环境中使用 Swagger UI,你…

太牛了!AI大佬的课程!吴恩达、李飞飞、李宏毅、Hinton、LeCun...

本文精心梳理了AI顶级大佬教授的人工智能课程,涵盖了深度学习、机器学习等多个领域的前沿内容。 这些课程将引领您深入了解决策树、朴素贝叶斯、逻辑回归、神经网络和深度学习等核心知识点,同时还将探索贝叶斯学习、支持向量机和核方法、聚类、无监督学…

【原创教程】自动化工程案例01:8工位插针装配机02

上一篇文章我们分析了8工位的每一个工位情况,这篇我们跟大家聊聊触摸屏部分。 触摸屏拥有:8个主页面,IO点和手动操作有2个分页面 主页面:主画面 涉及到保密问题,我们把标题栏给删掉,大家知道有标题栏就可…

骨传导耳机哪个品牌好用?精选骨传导耳机品牌排行榜前十名推荐

随着健康生活方式与运动热潮的兴起,骨传导耳机这一非常具有创新意义的蓝牙耳机逐渐走进大众视野,凭借其独特的传音方式既保证了音乐的享受,又可以兼顾运动时的安全与周围环境感知。但随着市场需求逐渐增加,市面上开始出现各式各样…

Docker中部署nacos 开启鉴权springboot连接配置

nacos开启鉴权后发现各种连不上。 按道理说所有的东西都是采用同一个docker网络连接的,连接的时候可以采用容器名连接。 下面是刚开始springboot中的链接配置。增加了用户名和密码 这里nacos我们用到了注册中心和配置中心。启动项目的时候配置中心没有问题&#x…