题目需求
从订单明细表(order_detail)中筛选出去年总销量小于100的商品及其销量,假设今天的日期是2022-01-10,不考虑上架时间小于一个月的商品。
期望结果如下:
sku_id (商品id) | name (商品名称) | order_num (销量) |
---|---|---|
1 | xiaomi 10 | 49 |
3 | apple 12 | 35 |
4 | xiaomi 13 | 53 |
6 | 洗碗机 | 26 |
需要用到的表:
商品信息表:sku_info
sku_id(商品id) | name(商品名称) | category_id(分类id) | from_date(上架日期) | price(商品价格) |
---|---|---|---|---|
1 | xiaomi 10 | 1 | 2020-01-01 | 2000 |
6 | 洗碗机 | 2 | 2020-02-01 | 2000 |
9 | 自行车 | 3 | 2020-01-01 | 1000 |
订单明细表:order_detail
order_detail_id(订单明细id) | order_id(订单id) | sku_id(商品id) | create_date(下单日期) | price(商品单价) | sku_num(商品件数) |
---|---|---|---|---|---|
1 | 1 | 1 | 2021-09-30 | 2000.00 | 2 |
2 | 1 | 3 | 2021-09-30 | 5000.00 | 5 |
22 | 10 | 4 | 2020-10-02 | 6000.00 | 1 |
实现一
select t1.sku_id,
t1.name,
sum(sku_num) as order_num
from (
-- 1) 过滤掉上架时间小于一个月的商品
select sku_id,
name,
category_id,
price
from sku_info
where from_date < date_add('2022-01-10', -30)
) t1
left join
(
select sku_id,
create_date,
sku_num
from order_detail
) t2
on t1.sku_id = t2.sku_id
-- 选出 去年的下单记录
where year(create_date) = '2021'
group by t1.sku_id, t1.name
-- 选出 总销量小于100的商品
having sum(sku_num) < 100
题目来源
http://practice.atguigu.cn/#/question/7/desc?qType=SQL