solaris.wordpress,南宁网站排名优化公司,哈尔滨网站设计培训班,猎头网站怎么做#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克#x1f379; ✨博客主页#xff1a;小小恶斯法克的博客 #x1f388;该系列文章专栏#xff1a;力扣刷题讲解-MySQL #x1f379;文章作者技术和水平很有限#xff0c;如果文中出… 欢迎您来到我的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.找没有被id2的客户推荐过的人重点我们就是看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
); 希望对你有帮助