力扣刷MySQL-第五弹(详细讲解)

 🎉欢迎您来到我的MySQL基础复习专栏

☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:力扣刷题讲解-MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️

​​

目录

🚀寻找用户推荐人

🚀下单最多的客户


🚀寻找用户推荐人

表: Customer

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
| referee_id  | int     |
+-------------+---------+
在 SQL 中,id 是该表的主键列。
该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。

找出那些 没有被 id = 2 的客户 推荐 的客户的姓名。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入: 
Customer 表:
+----+------+------------+
| id | name | referee_id |
+----+------+------------+
| 1  | Will | null       |
| 2  | Jane | null       |
| 3  | Alex | 2          |
| 4  | Bill | null       |
| 5  | Zack | 1          |
| 6  | Mark | 2          |
+----+------+------------+
输出:
+------+
| name |
+------+
| Will |
| Jane |
| Bill |
| Zack |
+------+

自己的思路:

1.这题算是很简单的题了

2.找没有被id=2的客户推荐过的人,重点我们就是看Customer表中的referee_id这个字段

3.没被2推荐过的,那就是只有1和null

4.我的想法是直接用where去过滤,那么我们要考虑where后面的条件是什么?

5.应该就是where referee_id != 2 or referee_id is null

6.满足这个条件的我们就查询

7.我们完善后的代码

这道题的考察点在于,sql里面的不等于,不包含null。

在 SQL 中,使用 = 或 != 来比较 NULL 和任何值都不会返回 TRUE 或 FALSE,因为 NULL 代表着未知的值。因此,要检查某一列是否为 NULL,应该使用 IS NULL 或 IS NOT NULL 来进行判断。

SELECTname
FROM customer
WHERE referee_id != 2 OR referee_id is NULL;

1当然我们也可以避开null,用not in,去寻找查询出不是为2的人的姓名

2.代码如下

select name 
from customer
where id  not in 
(select id 
from customer where  referee_id =2)

1.因为在这种表中,客户是被推荐的,推荐的客户的它也是客户,相当于在公司中员工是员工,老板也是员工

2.这种类型的表,我们都可以想到一种方法叫自连接

3.接下来我们的思路是

4. 使用 LEFT JOIN 连接 Customer 表本身,以获取每个客户的推荐者信息。

5.那么on后面的连接条件很明显,就是表1的id等于表2的referee_id

6.使用 WHERE 子句过滤出那些没有被 id = 2 的客户推荐的客户。

7.选择并返回这些客户的姓名。 

8.代码如下:

SELECT c1.name
FROM Customer c1
LEFT JOIN Customer c2 ON c1.id = c2.referee_id
WHERE c2.referee_id != 2 OR c2.referee_id IS NULL;

🚀下单最多的客户

表: Orders

+-----------------+----------+
| Column Name     | Type     |
+-----------------+----------+
| order_number    | int      |
| customer_number | int      |
+-----------------+----------+
在 SQL 中,Order_number是该表的主键。
此表包含关于订单ID和客户ID的信息。

查找下了 最多订单 的客户的 customer_number 。

测试用例生成后, 恰好有一个客户 比任何其他客户下了更多的订单。

查询结果格式如下所示。

示例 1:

输入: 
Orders 表:
+--------------+-----------------+
| order_number | customer_number |
+--------------+-----------------+
| 1            | 1               |
| 2            | 2               |
| 3            | 3               |
| 4            | 3               |
+--------------+-----------------+
输出: 
+-----------------+
| customer_number |
+-----------------+
| 3               |
+-----------------+
解释: 
customer_number 为 '3' 的顾客有两个订单,比顾客 '1' 或者 '2' 都要多,因为他们只有一个订单。
所以结果是该顾客的 customer_number ,也就是 3 。

1.思考如何输出每个客户的订单数量

2.我们根据customer_number来进行分组

3.

select customer_number, count(order_number) 
from Orders 
group by customer_number;

4.输出为

  

5.找到客户订单的最大值

6.

select max(sum) 
from (select customer_number, count(order_number) as sumfrom Ordersgroup by customer_number
)tmp;

7.

 

8.找到订单数量与最大值相等的客户

9.

select customer_number, count(order_number)
from Orders group by customer_number
having count(order_number) = (select max(sum) from (select customer_number, count(order_number) as sumfrom Ordersgroup by customer_number)tmp
);

10.第四步,优化一下输出的内容

11.

select customer_number
from Orders group by customer_number
having count(order_number) = (select max(sum) from (select count(order_number) as sumfrom Ordersgroup by customer_number)tmp
);

希望对你有帮助

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】_网络编程基础

目录 1. 网络编程基础 1.1 网络编程定义 1.2 网络编程中的基本概念 1.2.1 API 1.2.2.发送端和接收端 1.2.3 请求和响应 1.2.4 客户端和服务端 2. Socket 套接字 2.1 概念 2.2 分类 3. UDP数据报套接字编程 3.1 DatagramSocket API 3.1.1 含义 3.1.2 构造方法 3…

C语言第一弹---C语言基本概念(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 C语言基本概念 1、C语言是什么?2、C语言的历史和辉煌3、编译器的选择VS20223.1、编译和链接3.2、编译器对比3.3、VS2022优缺点 4、VS项目和源文件、头…

论文阅读笔记AI篇 —— Transformer模型理论+实战 (四)

论文阅读笔记AI篇 —— Transformer模型理论实战 (四) 一、理论1.1 理论研读1.2 什么是AI Agent? 二、实战2.1 先导知识2.1.1 tensor的创建与使用2.1.2 PyTorch的模块2.1.2.1 torch.nn.Module类的继承与使用2.1.2.2 torch.nn.Linear类 2.2 Transformer代…

LSTM学习笔记

上一篇文章中我们提到,CRNN模型中用于预测特征序列上下文的模块为双向LSTM模块,本篇中就来针对该模块的结构和实现做一些理解。 Bidirectional LSTM模块结构如下图所示: 在Pytorch中,已经集成了LSTM模块,定义如下&…

Python 自动化测试:数据驱动

软件质量。这种测试,在功能测试中非常耗费人力物力,但是在自动化中,却比较好实现,只要实现了测试操作步骤,然后将多组测试数据以数据驱动的形式注入,就可以实现了。 前面文章学习了参数化,当数…

关于常见分布式组件高可用设计原理的理解和思考

文章目录 1. 数据存储场景和存储策略1.1 镜像模式-小规模数据1.2 分片模式-大规模数据 2. 数据一致性和高可用问题2.1 镜像模式如何保证数据一致性2.2 镜像模式如何保证数据高可用2.2.1 HA模式2.2.2 分布式选主模式 2.3 分片模式如何数据一致性和高可用 3. 大规模数据集群的架构…

电子学会C/C++编程等级考试2023年12月(八级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:生理周期 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集…

『C++成长记』模板

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、泛型编程 二、函数模板 📒2.1函数模板概念 📒2.2函数…

C语言算法赛——蓝桥杯(省赛试题)

一、十四届C/C程序设计C组试题 十四届程序C组试题A#include <stdio.h> int main() {long long sum 0;int n 20230408;int i 0;// 累加从1到n的所有整数for (i 1; i < n; i){sum i;}// 输出结果printf("%lld\n", sum);return 0; }//十四届程序C组试题B…

vue2 点击按钮下载文件保存到本地(后台返回的zip压缩流)

// import ./mock/index.js; // 该项目所有请求使用mockjs模拟 去掉mock页面url下载 console.log(res, res)//token 是使页面不用去登录了if (res.file) {window.location.href Vue.prototype.$config.VUE_APP_BASE_IDSWAPI Vue.prototype.$config.VUE_APP_IDSW /service/mode…

Jetson Orin Nano安装OpenCV带cuda加速版本的全过程

安装过程 使用jetpack安装的jetson&#xff0c;自带了opencv&#xff0c;但是没有cuda加速的&#xff0c;输入opencv_version 使用jtop查看&#xff0c;可以确认自带的opencv是没用cuda的 卸载opencv&#xff0c;先查看有哪些包 pip3 list | grep opencv opencv-python 然后卸…

python系列-输入输出关系运算符算术运算符

&#x1f308;个人主页: 会编程的果子君​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 注释的语法 注释的规范 输入输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 注释的语法 python中有两种注释风格&#xff1a; 1.注释行&#xff1a;…