- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Customers
+---------------+---------+ | Column Name | Type | +---------------+---------+ | customer_id | int | | customer_name | varchar | +---------------+---------+ customer_id 是该表主键. 该表第一行包含了顾客的名字和 id.编写一个解决方案, 找到所有遗失的顾客 id。遗失的顾客 id 是指那些不在
Customers
表中, 值却处于1
和表中 最大customer_id
之间的 id.注意: 最大的
customer_id
值不会超过100
.返回结果按
ids
升序 排列查询结果格式如下例所示。
示例 1:
输入: Customers
表: +-------------+---------------+ | customer_id | customer_name | +-------------+---------------+ | 1 | Alice | | 4 | Bob | | 5 | Charlie | +-------------+---------------+ 输出: +-----+ |ids
| +-----+ | 2 | | 3 | +-----+ 解释: 表中最大的 customer_id 是 5, 所以在范围 [1,5] 内, ID2 和 3 从表中遗失.
三,建表语句
Create table If Not Exists Customers (customer_id int, customer_name varchar(20));
Truncate table Customers;
insert into Customers (customer_id, customer_name) values ('1', 'Alice');
insert into Customers (customer_id, customer_name) values ('4', 'Bob');
insert into Customers (customer_id, customer_name) values ('5', 'Charlie');
select * from Customers;
四,分析
思路
表格大法
第一步:求出原表最大的客户id
第二步:递归生成从1到这个最大di的序列
第三步:用这个表左连接原表,如果客户id是null;
第四步:改名,输出
解题过程
Mysql+Pandas 实现上述表格逻辑
第一步:求出原表最大的客户id
在mysql
在pandas
第二步:递归生成从1到这个最大di的序列
在mysql
在pandas
第三步:用这个表左连接原表,如果客户id是null
在mysql
在pandas
第四步:改名,输出
在mysql
在pandas
五,SQL解答
with recursive t1 as (
select 1 as n
union
select n+1 from t1
where n< (select max(customer_id) from customers)
)
# select * from t1;
select n as ids from t1 left join customers on t1.n =Customers.customer_id where customer_id is null order by n;
六,验证
七,知识点总结
- 递归的运用
- 最大值的运用
- 左连接的运用
- 判断空值的运用
- 排序的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用