题解 | #常规解法 通俗易懂#

店铺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

全部评论
以上是本人的个人见解,如果有更好的想法,欢迎大家交流!
点赞 回复 分享
发布于 2024-05-21 21:03 台湾

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务