🚀寻找用户推荐人
表: 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 );
希望对你有帮助