题目需求
从订单明细表(order_detail)中统计出每种商品销售件数最多的日期及当日销量,如果有同一商品多日销量并列的情况,取其中的最小日期。
期望结果如下:
sku_id (商品id) | create_date (销量最高的日期) | sum_num (销量) |
---|---|---|
1 | 2021-09-30 | 9 |
2 | 2021-10-02 | 5800 |
3 | 2021-10-05 | 9 |
… | … | … |
需要用到的表:
订单明细表: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) 选出 rank_num=1 的记录,如果有同一商品多日销量并列的情况,取其中的最小日期。
select sku_id,
sum_sku_num sum_num,
min(create_date) over (partition by sku_id) create_date
from (
-- 2) 按 sku_id 分组、sku_num排序后,进行编号
select sku_id,
create_date,
sum_sku_num,
rank() over (partition by sku_id order by sum_sku_num desc) rank_num
from (
-- 1)按 create_date、sku_id 进行分组,计算每个物品、每天的销售总件数
select create_date,
sku_id,
sum(sku_num) sum_sku_num
from order_detail
group by create_date, sku_id
) t1
) t2
where rank_num = 1;
题目来源
http://practice.atguigu.cn/#/question/9/desc?qType=SQL