- 学习:知识的初次邂逅
- 复习:知识的温故知新
练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Customer
+---------------+---------+ | Column Name | Type | +---------------+---------+ | customer_id | int | | customer_name | varchar | +---------------+---------+ customer_id 是该表具有唯一值的列。 该表的每行包含网上商城的每一位顾客的信息。表:
Orders
+---------------+---------+ | Column Name | Type | +---------------+---------+ | order_id | int | | sale_date | date | | order_cost | int | | customer_id | int | | seller_id | int | +---------------+---------+ order_id 是该表具有唯一值的列。 该表的每行包含网上商城的所有订单的信息. sale_date 是顾客 customer_id 和卖家 seller_id 之间交易的日期.表:
Seller
+---------------+---------+ | Column Name | Type | +---------------+---------+ | seller_id | int | | seller_name | varchar | +---------------+---------+ seller_id 是该表主具有唯一值的列。 该表的每行包含每一位卖家的信息.写一个解决方案, 报告所有在
2020
年度没有任何卖出的卖家的名字。返回结果按照
seller_name
升序排列。查询结果格式如下例所示。
示例 1:
输入: Customer
表: +--------------+---------------+ | customer_id | customer_name | +--------------+---------------+ | 101 | Alice | | 102 | Bob | | 103 | Charlie | +--------------+---------------+Orders
表: +-------------+------------+--------------+-------------+-------------+ | order_id | sale_date | order_cost | customer_id | seller_id | +-------------+------------+--------------+-------------+-------------+ | 1 | 2020-03-01 | 1500 | 101 | 1 | | 2 | 2020-05-25 | 2400 | 102 | 2 | | 3 | 2019-05-25 | 800 | 101 | 3 | | 4 | 2020-09-13 | 1000 | 103 | 2 | | 5 | 2019-02-11 | 700 | 101 | 2 | +-------------+------------+--------------+-------------+-------------+Seller
表: +-------------+-------------+ | seller_id | seller_name | +-------------+-------------+ | 1 | Daniel | | 2 | Elizabeth | | 3 | Frank | +-------------+-------------+输出:
+-------------+ |seller_name
| +-------------+ | Frank | +-------------+解释:
Daniel 在 2020 年 3 月卖出 1 次。 Elizabeth 在 2020 年卖出 2 次, 在 2019 年卖出 1 次。 Frank 在 2019 年卖出 1 次, 在 2020 年没有卖出。
三,建表语句
;
Create table If Not Exists Customer (customer_id int, customer_name varchar(20));
Create table If Not Exists Orders (order_id int, sale_date date, order_cost int, customer_id int, seller_id int);
Create table If Not Exists Seller (seller_id int, seller_name varchar(20));
Truncate table Customer;
insert into Customer (customer_id, customer_name) values ('101', 'Alice');
insert into Customer (customer_id, customer_name) values ('102', 'Bob');
insert into Customer (customer_id, customer_name) values ('103', 'Charlie');
Truncate table Orders;
insert into Orders (order_id, sale_date, order_cost, customer_id, seller_id) values ('1', '2020-03-01', '1500', '101', '1');
insert into Orders (order_id, sale_date, order_cost, customer_id, seller_id) values ('2', '2020-05-25', '2400', '102', '2');
insert into Orders (order_id, sale_date, order_cost, customer_id, seller_id) values ('3', '2019-05-25', '800', '101', '3');
insert into Orders (order_id, sale_date, order_cost, customer_id, seller_id) values ('4', '2020-09-13', '1000', '103', '2');
insert into Orders (order_id, sale_date, order_cost, customer_id, seller_id) values ('5', '2019-02-11', '700', '101', '2');
Truncate table Seller;
insert into Seller (seller_id, seller_name) values ('1', 'Daniel');
insert into Seller (seller_id, seller_name) values ('2', 'Elizabeth');
insert into Seller (seller_id, seller_name) values ('3', 'Frank');
四,分析
题解:
第一张表:顾客表
字段: 顾客id和顾客i姓名
第二张表:订单表
字段:订单id,订购日期,订单成本,顾客id,卖家id
第三张表:卖家表
字段:卖家id,卖家姓名
写一个解决方案, 报告所有在
2020
年度没有任何卖出的卖家的名字。返回结果按照
seller_name
升序排列。要求: 在2020年度 没有卖出任何的卖家名字
条件 保留2020年 订单表 订购日期 在 2020年
分析
第一步,让订单表只保留2020年度的销售信息;
第二步,用卖家表和订单表 左连接 去卖家和订单都有的共同数据,订单表如果没有卖家表的信息会返回null
第三步,where 条件 order_id is null 拿到seller_name
五,SQL解答
with t1 as (
select order_id, sale_date, order_cost, customer_id, seller_id
from orders where year(sale_date) ='2020'
)
select seller_name from Seller s left join t1 on s.seller_id=t1.seller_id
where t1.sale_date is null
order by seller_name;
六,验证
七,知识点总结
判断日期时候 是2020年的 多种方法
- YEAR('2020-12-12') = 2020
- sale_date LIKE '2020%'
- sale_date REGEXP '^2020'
- LEFT('2020-12-12',4) = '2020'
- MID('2020-12-12',1,4) = '2020'
- substring('2020-12-12',1,4) = '2020'
- DATE_FORMAT('2020-12-12','%Y') = 2020
- EXTRACT(YEAR FROM '2020-12-12') = 2020
- sale_date BETWEEN '2020-01-01' AND '2020-12-31'
- sale_date > '2019-12-31' AND sale_date < '2021-01-01'
- sale_date >= '2020-01-01' AND sale_date <= '2020-12-31
左连接的练习,左表和右表的中间部分,如果右表没有左表的字段 会以null填充
- 学习:知识的初次邂逅
- 复习:知识的温故知新
练习:知识的实践应用