【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180

news/2024/12/21 20:22:23/

四题都比较简单,可以直接秒。

1. 力扣2082:富有客户的数量

1.1 题目:

表: Store

+-------------+------+
| Column Name | Type |
+-------------+------+
| bill_id     | int  |
| customer_id | int  |
| amount      | int  |
+-------------+------+
bill_id 是这个表的主键(具有唯一值的列)。
每一行包含一个订单的金额及相关客户的信息。

编写解决方案找出 至少有一个 订单的金额 严格大于 500 的客户的数量。

返回结果格式如下示例所示:

示例 1:

输入:
Store 表:
+---------+-------------+--------+
| bill_id | customer_id | amount |
+---------+-------------+--------+
| 6       | 1           | 549    |
| 8       | 1           | 834    |
| 4       | 2           | 394    |
| 11      | 3           | 657    |
| 13      | 3           | 257    |
+---------+-------------+--------+
输出: 
+------------+
| rich_count |
+------------+
| 2          |
+------------+
解释:
客户 1 有 2 个订单金额严格大于 500。
客户 2 没有任何订单金额严格大于 500。
客户 3 有 1 个订单金额严格大于 500。

1.2 思路:

75+通过率的简单题。

1.3 题解:

sql">-- 以客户id分组,只要他的最高的一次订单金额是严格大于500的就保留下来即可
with tep as (select customer_idfrom Storegroup by customer_idhaving max(amount) > 500
)select count(*) rich_count
from tep

2. 力扣2084:为订单类型为0的客户删除类型为1的订单

2.1 题目:

活动表: Orders

+-------------+------+
| Column Name | Type |
+-------------+------+
| order_id    | int  | 
| customer_id | int  |
| order_type  | int  | 
+-------------+------+
order_id是此表的主键列。
此表的每一行都表示订单的ID、订购该订单的客户的ID以及订单类型。
订单可以是类型0或类型1。

编写SQL查询以根据以下条件报告所有订单:

  • 如果客户至少有一个类型为0的订单,则不要报告该客户的任何类型为1的订单。
  • 否则,报告客户的所有订单。

按任意顺序返回结果表。

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

示例 1:

输入: 
Orders table:
+----------+-------------+------------+
| order_id | customer_id | order_type |
+----------+-------------+------------+
| 1        | 1           | 0          |
| 2        | 1           | 0          |
| 11       | 2           | 0          |
| 12       | 2           | 1          |
| 21       | 3           | 1          |
| 22       | 3           | 0          |
| 31       | 4           | 1          |
| 32       | 4           | 1          |
+----------+-------------+------------+
输出: 
+----------+-------------+------------+
| order_id | customer_id | order_type |
+----------+-------------+------------+
| 31       | 4           | 1          |
| 32       | 4           | 1          |
| 1        | 1           | 0          |
| 2        | 1           | 0          |
| 11       | 2           | 0          |
| 22       | 3           | 0          |
+----------+-------------+------------+
解释: 
客户1有两个类型为0的订单。我们两个都返回。
客户2的订单类型为0,订单类型为1。我们只返回类型为0的订单。
客户3的订单类型为0,订单类型为1。我们只返回类型为0的订单。
客户4有两个类型1的订单。我们两个都返回。

2.2 思路:

分为两种情况。

然后将两种情况查询到的结果union起来。

2.3 题解:

sql">-- 先找到客户的订单类型有0的那些客户
with tep as (select customer_idfrom Ordersgroup by customer_idhaving min(order_type) = 0
)-- 然后找到不在tep表里的客户的其他客户
-- 查询这些客户的所有信息
select *
from Orders
where customer_id not in (select * from tep)union all-- 找到这些客户,并删除该客户类型是1的订单
select order_id, o.customer_id, order_type
from Orders o 
join tep
on o.customer_id = tep.customer_id
where order_type = 0

3. 力扣2072:赢得比赛的大学

3.1 题目:

表: NewYork

+-------------+------+
| Column Name | Type |
+-------------+------+
| student_id  | int  |
| score       | int  |
+-------------+------+
在 SQL 中,student_id 是这个表的主键。
每一行包含纽约大学 (New York University) 中一名学生一次考试的成绩。

表: California

+-------------+------+
| Column Name | Type |
+-------------+------+
| student_id  | int  |
| score       | int  |
+-------------+------+
在 SQL 中,student_id 是这个表的主键。
每一行包含加州大学 (California University) 中一名学生一次考试的成绩。

纽约大学和加州大学之间举行了一场比赛。这场比赛由两所大学中相同数量的学生参加。拥有更多优秀学生的大学赢得这场比赛。如果两所大学的优秀学生数量相同,则这场比赛平局。

优秀学生是指在考试中获得 90% 或更高成绩的学生。

返回:

  • "New York University" 若纽约大学赢得这场比赛。
  • "California University" 若加州大学赢得这场比赛。
  • "No Winner" 若这场比赛平局。

返回结果格式如下示例所示:

示例 1:

输入: 
NewYork 表:
+------------+-------+
| student_id | score |
+------------+-------+
| 1          | 90    |
| 2          | 87    |
+------------+-------+
California 表:
+------------+-------+
| student_id | score |
+------------+-------+
| 2          | 89    |
| 3          | 88    |
+------------+-------+
输出: 
+---------------------+
| winner              |
+---------------------+
| New York University |
+---------------------+
解释:
纽约大学有 1 名优秀学生,加州大学有 0 名优秀学生。

示例 2:

输入: 
NewYork 表:
+------------+-------+
| student_id | score |
+------------+-------+
| 1          | 89    |
| 2          | 88    |
+------------+-------+
California 表:
+------------+-------+
| student_id | score |
+------------+-------+
| 2          | 90    |
| 3          | 87    |
+------------+-------+
输出: 
+-----------------------+
| winner                |
+-----------------------+
| California University |
+-----------------------+
解释:
纽约大学有 0 名优秀学生,加州大学有 1 名优秀学生。

示例 3:

输入: 
NewYork 表:
+------------+-------+
| student_id | score |
+------------+-------+
| 1          | 89    |
| 2          | 90    |
+------------+-------+
California 表:
+------------+-------+
| student_id | score |
+------------+-------+
| 2          | 87    |
| 3          | 99    |
+------------+-------+
输出: 
+-----------+
| winner    |
+-----------+
| No Winner |
+-----------+
解释:
纽约大学和加州大学均有 1 名优秀学生。

3.2 思路:

3.3 题解:

sql">SELECT 
CASE WHEN (SELECT COUNT(*) FROM NewYork WHERE score >= 90) > (SELECT COUNT(*) FROM California WHERE score >= 90) THEN 'New York University'WHEN (SELECT COUNT(*) FROM NewYork WHERE score >= 90) < (SELECT COUNT(*) FROM California WHERE score >= 90) THEN 'California University'ELSE 'No Winner'
END AS winner;

4. 力扣2112:最繁忙的机场

4.1 题目:

表: Flights

+-------------------+------+
| Column Name       | Type |
+-------------------+------+
| departure_airport | int  |
| arrival_airport   | int  |
| flights_count     | int  |
+-------------------+------+
(departure_airport, arrival_airport) 是该表的主键列。
该表的每一行都表示从 departure_airport 出发并到达 arrival_airport 的 flights_count 航班。

编写一个 SQL 来查询 流量最大 的机场的 ID。客流量最大的机场是指从该机场起飞或抵达该机场的航班总数最多的机场。如果有多个机场流量最大,请全部查询出来。

以 任意顺序 返回结果表。

查询结果格式如下所示。

示例 1:

输入: 
Flights 表:
+-------------------+-----------------+---------------+
| departure_airport | arrival_airport | flights_count |
+-------------------+-----------------+---------------+
| 1                 | 2               | 4             |
| 2                 | 1               | 5             |
| 2                 | 4               | 5             |
+-------------------+-----------------+---------------+
输出: 
+------------+
| airport_id |
+------------+
| 2          |
+------------+
解释: 
1 号机场有 9 个航班 (4 个出发, 5 个到达).
2 号机场有 14 个航班 (10 个出发, 4 个到达).
4 号机场有 5 个航班 (5 个到达).
客流量最大的机场是 2 号机场。

示例 2:

输入: 
Flights 表:
+-------------------+-----------------+---------------+
| departure_airport | arrival_airport | flights_count |
+-------------------+-----------------+---------------+
| 1                 | 2               | 4             |
| 2                 | 1               | 5             |
| 3                 | 4               | 5             |
| 4                 | 3               | 4             |
| 5                 | 6               | 7             |
+-------------------+-----------------+---------------+
输出: 
+------------+
| airport_id |
+------------+
| 1          |
| 2          |
| 3          |
| 4          |
+------------+
解释: 
1 号机场有 9 个航班 (4 个出发, 5 个到达).
2 号机场有 9 个航班 (5 个出发, 4 个到达).
3 号机场有 9 个航班 (5 个出发, 4 个到达).
4 号机场有 9 个航班 (5 个出发, 4 个到达).
5 号机场有 7 个航班 (7 个出发).
6 号机场有 7 个航班 (7 个到达).
流量最大的机场是机场 1、2、3 和 4。

4.2 思路:

先炸裂,然后就是简单的分组。

4.3 题解:

sql">-- 炸裂,然后得到需要的表
with tep as (select departure_airport airport, flights_count from Flightsunion all select arrival_airport airport, flights_count from Flights
)-- 然后再查询每个机场的人流量是否是最大的。
select airport airport_id 
from tep
group by airport
having sum(flights_count) >= all(-- 这里是查询到每个机场的人流量select sum(flights_count)from tepgroup by airport
)

5. 力扣180:连续出现的数字

5.1 题目:

表:Logs

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| num         | varchar |
+-------------+---------+
在 SQL 中,id 是该表的主键。
id 是一个自增列。

找出所有至少连续出现三次的数字。

返回的结果表中的数据可以按 任意顺序 排列。

结果格式如下面的例子所示:

示例 1:

输入:
Logs 表:
+----+-----+
| id | num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+
输出:
Result 表:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+
解释:1 是唯一连续出现至少三次的数字。

5.2 思路:

感觉之前写过类似的,遇见就很简单。

三张表join然后where过滤,最后注意distinct去重。

5.3 题解:

sql">-- join三张表自连接
select distinct l1.num ConsecutiveNums
from Logs l1, Logs l2, Logs l3
where 
l1.id + 1 = l2.id and l1.num = l2.num
and
l2.id + 1 = l3.id and l2.num = l3.num

http://www.ppmy.cn/news/1536877.html

相关文章

Go语言实现长连接并发框架 - 任务管理器

文章目录 前言接口结构体接口实现项目地址最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我们上篇博客实现了路由分组的功能&#xff0c;接下来这篇博客我们将要实现任务管理模块 接口 trait/task_mgr.go type TaskMgr interface {RouterGroupStart()StartWorker(tas…

循环神经网络-LSTM网络

文章目录 前言一、LSTM网络简介二、LSTM的门结构1.遗忘门2.输入门3.输出门 三、总结 前言 循环神经网络&#xff08;Recurrent Neural Networks&#xff0c;RNN&#xff09;是一种特殊的神经网络&#xff0c;具有能够处理序列数据的能力&#xff0c;然而&#xff0c;RNN在处理…

数值分析作业(第二章):代码+手写计算

《数值计算方法》丁丽娟-数值实验作业-第二章&#xff08;MATLAB&#xff09; 作业P58: 1 &#xff0c;2&#xff0c;3&#xff0c;6&#xff0c;8(1), 12, 13 数值实验P61: 2, 3 数值实验&#xff08;第二章&#xff09; 代码仓库&#xff1a;https://github.com/sylvanding/b…

信息安全工程师(42)VPN类型和实现技术

前言 VPN&#xff08;Virtual Private Network&#xff0c;虚拟专用网络&#xff09;是一种在公共网络上建立专用网络连接的技术。 一、VPN类型 VPN可以根据不同的分类标准划分为多种类型&#xff0c;主要包括以下几种&#xff1a; 按协议分类&#xff1a; PPTP&#xff08;Poi…

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS&#xff08;鸿蒙系统&#xff09;&#xff0c;uni-app 提供了特定的支持&#xff0c;允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…

国庆作业

day1 1.开发环境 Linux系统GCCFDBmakefilesqlite3 2.功能描述 项目功能: 服务器&#xff1a;处理客户端的请求&#xff0c;并将数据存入数据库中&#xff0c;客户端请求的数据从数据库进行获取&#xff0c;服务器转发给客户端。 用户客户端&#xff1a;实现账号的注册、登…

php与python建站的区别有哪些

php与Python建站的区别&#xff1a; 1、语言层面Python的特性比php好&#xff0c;更加规范。 2、Python的性能比php高。 3、有只需要启动服务的时候执行一次的代码&#xff0c;在php里每个请求都会被执行一次&#xff0c;Python不需要。虽然php可以通过缓存缩短这方面的差距…

【命令操作】linux上watch命令详解 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【命令操作】linux上basename和dirname使用详解 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于Linux上watch命令的详解文章。watch命令是Linux系统中非常有用的一个工具&#xff0c;它可以定期执行指定的命令并在终端…