148,SQL训练之,力扣,1613. 找到遗失的ID

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用

目录

一,原题力扣链接

二,题干

三,建表语句

四,分析

五,SQL解答

六,验证

七,知识点总结


一,原题力扣链接

. - 力扣(LeetCode)

二,题干

表: 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;

六,验证

七,知识点总结

  • 递归的运用
  • 最大值的运用
  • 左连接的运用
  • 判断空值的运用
  • 排序的运用

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值