- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Sales
+--------------+---------+ | Column Name | Type | +--------------+---------+ | sale_id | int | | product_name | varchar | | sale_date | date | +--------------+---------+ sale_id 是该表具有唯一值的列 该表的每一行包含了产品的名称及其销售日期因为在 2000 年该表是手工填写的,
product_name
可能包含前后空格,而且包含大小写。编写一个解决方案报告每个月的销售情况:
product_name
是小写字母且不包含前后空格sale_date
格式为('YYYY-MM')
total
是产品在本月销售的次数返回结果以
product_name
升序 排列,如果有排名相同,再以sale_date
升序 排列。查询结果格式如下所示。
示例 1:
输入: Sales
表: +---------+--------------+------------+ | sale_id | product_name | sale_date | +---------+--------------+------------+ | 1 | LCPHONE | 2000-01-16 | | 2 | LCPhone | 2000-01-17 | | 3 | LcPhOnE | 2000-02-18 | | 4 | LCKeyCHAiN | 2000-02-19 | | 5 | LCKeyChain | 2000-02-28 | | 6 | Matryoshka | 2000-03-31 | +---------+--------------+------------+ 输出: +--------------+-----------+-------+ | product_name | sale_date | total | +--------------+-----------+-------+ | lckeychain | 2000-02 | 2 | | lcphone | 2000-01 | 2 | | lcphone | 2000-02 | 1 | | matryoshka | 2000-03 | 1 | +--------------+-----------+-------+ 解释: 一月份售出 2 部 LcPhones。请注意,产品名称不区分大小写,且可能包含空格。 二月份售出 2 个 LCKeychains 和 1 部 LCPhone。 三月份售出 1 个 Matryoshka。
三,建表语句
Create table If Not Exists Sales (sale_id int, product_name varchar(30), sale_date date);
Truncate table Sales;
insert into Sales (sale_id, product_name, sale_date) values ('1', 'LCPHONE', '2000-01-16');
insert into Sales (sale_id, product_name, sale_date) values ('2', 'LCPhone', '2000-01-17');
insert into Sales (sale_id, product_name, sale_date) values ('3', 'LcPhOnE', '2000-02-18');
insert into Sales (sale_id, product_name, sale_date) values ('4', 'LCKeyCHAiN', '2000-02-19');
insert into Sales (sale_id, product_name, sale_date) values ('5', 'LCKeyChain', '2000-02-28');
insert into Sales (sale_id, product_name, sale_date) values ('6', 'Matryoshka', '2000-03-31');
select * from sales;
四,分析
思路
表格大法
第一步:对产品名称列 去除左右两边空格 和转换为小写
第二步:对时间列截取 保留年和月
第三步:以产品名称,和时间列分组 count sale_id的数量
第四步:改名 排序 映射指定的列 输出
解题过程
MySQL+Pandas中实现上述表格逻辑
第一步:对产品名称列 去除左右两边空格 和转换为小写
在mysql
在pandas
第二步:对时间列截取 保留年和月
在mysql
在pandas
第三步:以产品名称,和时间列分组 count sale_id的数量
在mysql
在pandas 第四步:改名 排序 映射指定的列 输出
在mysql
在pandas
五,SQL解答
select
lower(trim(product_name)) as product_name,
substring(sale_date,1,7) as sale_date,
count(sale_id) as total
from sales group by lower(trim(product_name)),substring(sale_date,1,7) order by product_name,sale_date;
六,验证
七,知识点总结
- sql中去除左右两边空格的函数 trem
- sql中转换小写的函数 lower
- sql中截取时间的函数 substring
- 分组聚合的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用