题目需求
从订单明细表(order_detail)统计每个商品销售首年的年份,销售数量和销售总额。
期望结果如下:
sku_id (商品id) | year (销售首年年份) | order_num (首年销量) | order_amount <decimal(16,2)> (首年销售金额) |
---|---|---|---|
1 | 2020 | 2 | 4000.00 |
2 | 2020 | 26 | 260.00 |
3 | 2020 | 1 | 5000.00 |
4 | 2021 | 53 | 318000.00 |
… | … | … | … |
需要用到的表
订单明细表: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 |
实现一
-- 3) 按 sku_id、销售首年年份 year 分组,统计每个商品的 首年销量order_num、首年销售金额 order_amount
select sku_id,
`year`,
sum(sku_num) as order_num,
sum(price * sku_num) as order_amount
from (
-- 1) 获取每个 sku_id 销售首年年份 year 。over() --> 按照 sku_id 分组,create_date 升序排序,取 year(first_value(create_date))
select sku_id,
price,
sku_num,
create_date,
-- 注意:over() 也要放进 year() 中
year(first_value(create_date) over (partition by sku_id order by create_date)) as `year`
from order_detail
) t1
-- where 这里卡了一大会,不要忘记把不是首年的订单记录滤掉
where year(create_date) = `year`
group by sku_id, `year`;
题目来源
http://practice.atguigu.cn/#/question/6/desc?qType=SQL