题解 | #常规解法 通俗易懂#
店铺901国庆期间的7日动销率和滞销率
https://www.nowcoder.com/practice/e7837f66e8fb4b45b694d24ea61f0dc9
select -- 最后根据日期进行汇总
t1.dt
,round(ifnull(count(distinct t2.product_id)/t3.release_cnt, 0), 3) as sale_rate
,round(1 - ifnull(count(distinct t2.product_id)/t3.release_cnt, 0), 3) as unsale_rate
from ( -- 选出2021-10-01至2021-10-03三天中有销售数据的日期
select distinct
date_format(event_time, '%Y-%m-%d') as dt
from tb_order_overall
where date_format(event_time, '%Y-%m-%d') between '2021-10-01' and '2021-10-03'
) as t1
left join ( -- 找出901店铺在2021-09-25到2021-10-03之间售卖的产品,根据日期差,划分到10-01到10-03
select distinct
t1.product_id
,date_format(t2.event_time, '%Y-%m-%d') as dt
from tb_order_detail as t1
left join tb_order_overall as t2
on t1.order_id = t2.order_id
left join tb_product_info as t3
on t1.product_id = t3.product_id
where t2.status != 2
and date_format(t2.event_time, '%Y-%m-%d') between '2021-09-25' and '2021-10-03'
and t3.shop_id = 901
) as t2 on datediff(t1.dt, t2.dt) between 0 and 6
left join ( -- 使用拉链表计算不同日期区间的商品发布数,不同的日期区间对应不同的商品发布数
select
dt as start_dt
,ifnull(lead(dt, 1) over(order by dt), '9999-12-31') as end_dt
,sum(release_cnt) over(order by dt) as release_cnt
from (
select
shop_id
,date_format(release_time, '%Y-%m-%d') as dt
,count(1) as release_cnt
from tb_product_info
where shop_id = 901
group by
shop_id
,dt
) as t1
) as t3 on t1.dt >= t3.start_dt
and t1.dt < t3.end_dt
group by
t1.dt
,t3.release_cnt
order by
t1.dt
