题解 | #店铺901国庆期间的7日动销率和滞销率#

店铺901国庆期间的7日动销率和滞销率

https://www.nowcoder.com/practice/e7837f66e8fb4b45b694d24ea61f0dc9

#需求:计算店铺901在2021年国庆头3天的7日动销率和滞销率
#输出:dt、sale_rate、unsale_rate
#要求:输出时间为1号-3号,取值区间为9月25号-10月3号;shop_id=901;输出指标保留三位小数,按日期升序
#动销率=有销量的商品/已上架总商品数,滞销率=没有销量的商品/已上架总商品数,涉及三个指标
#需要用到的数据:shop_id、product_id、event_time
#拆分:动销率与滞销率:假设动销率=x/y,则滞销率=1-x/y,即只需要求得有销量的商品和已上架总商品数两个参数即可
#时间:有两次对时间的筛选,一次是计算指标时对参数时间区间的过滤,二是输出时对输出dt的区间限制
select dt,round(e1/e2,3) sale_rate,round(1-e1/e2,3) unsale_rate
from(
    select distinct date(event_time) dt,
    (
        select count(distinct product_id)
        from tb_order_overall
        join tb_order_detail using(order_id)
        join tb_product_info using(product_id)
        where timestampdiff(day,event_time,w1.event_time) between 0 and 6 and shop_id=901
        #这里timestampdiff的第一个time参数是表链接后的新表内的时间,第二个time参数是tb_order_overall表内的时间
        #这一步结合外层,是做关联子查询;对于外部查询返回的每一行数据,内部查询都要执行一次
        #逻辑为先选出10-01,执行一次子查询,筛选出09-25——10-01的日期,执行完毕回到外层;再选出10-02,筛选出09-26——10-02的日期,以此类推
    ) e1,
    #e1得到901店铺内,与dt日期关联的7日内,有销量的商品ID数,只要数,所以去重
    (
        select count(distinct product_id)
        from tb_product_info
        where shop_id=901
    ) e2
    #e2得到订单总表中901店内有销量的商品ID数
    from tb_order_overall w1
    where date(event_time) between '2021-10-01' and '2021-10-03'
    #限定输出dt的时间范围
) w2
order by 1

全部评论

相关推荐

10-10 01:10
已编辑
深圳大学 测试开发
面了100年面试不知...:六月到九月,四个项目一个实习,是魔丸吗
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务