2.7.1 题目需求
从订单明细表(order_detail)中筛选出去年总销量小于100的商品及其销量,假设今天的日期是2022-01-10,不考虑上架时间小于一个月的商品,期望结果如下:
1、查询order_detail表与sku_info表
.
2、分析题目并编写代码
题目信息中日期精确到年,因此立马想到year(日期)函数。有要求不考虑上架不足一月的商品,直觉告诉我们应该是个差值,如何计算这个时间差值?要用到datediff(时间1,时间2)函数。
--1 查询出21年销量小于100的商品
select sku_id,
year(create_date) year,
sum(sku_num) sum_num
from order_detail od
where year(create_date) = year(`current_date`())-2
group by sku_id, year(create_date)
having sum_num < 100;
其中的current_date(无参) 函数表示,获得当前日期。year(`current_date`())-2 表示获取2021年这个年份。
查询结果如下:
--2 join连接sku_info表,查询出商品的名称,并利用from_date与'2022-01-10'的日期差——>datediff(时间1,时间2)函数解决。
select si.sku_id,
name,
sum_num
from (select sku_id,
year(create_date) year,
sum(sku_num) sum_num
from order_detail od
where year(create_date) = year(`current_date`())-2
group by sku_id, year(create_date)
having sum_num < 100) t1
join sku_info si
on si.sku_id = t1.sku_id
where datediff('2022-01-10',from_date) >= 30;
查询结果如下:
完美!
总结:
上架日期参与的计算:就利用datediff()函数相减。