?🎉欢迎您来到我的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
?来进行判断。
SELECT
name
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 sum from Orders group 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 sum from Orders group 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 sum from Orders group by customer_number )tmp );
希望对你有帮助