题解 | #国庆期间近7日日均取消订单量#

国庆期间近7日日均取消订单量

https://www.nowcoder.com/practice/2b330aa6cc994ec2a988704a078a0703

#需求:统计国庆头3天里,每天的近7日日均订单完成量和日均订单取消量
#输出:日期、近7日日均订单完成量、日均订单取消量
#要求:输出时间范围为'2021-10-01'-'2021-10-03';求每个dt的近7日记录;输出保留2位小数,按dt升序
#拆分问题:
#国庆头3天,每天的近7日数据:dt between '2021-09-25' and '2021-10-03'限定时间范围
#订单完成量:sum(if(start_time is null,0,1)) tt1
#订单取消量:count(1)-tt1
#近7日日均:开窗,avg(tt1)over(order by dt rows 6 preceding) 依据dt日期,从当前行至向前6行取值
#思路:先子查询,限制时间范围并求得dt、订单完成量、订单取消量,然后开窗得到日均,加上要求的条件,输出
with t1 as(
  select dt,sum(tt1) tt2,count(1)-sum(tt1) tt3
  from(
    select date(order_time) dt,if(start_time is null,0,1) tt1
    from tb_get_car_order
    where date(order_time) between '2021-09-25' and '2021-10-03'
  ) t2
  group by dt
)
#建立虚拟表,得到限制时间选区后的数据表,和每日的订单完成量和取消量
select dt,round(ck1,2) finish_num_7d,round(ck2,2) cancel_num_7d
from(
  select dt,avg(tt2)over(order by dt rows 6 preceding) ck1,
  avg(tt3)over(order by dt rows 6 preceding) ck2
  from t1
) t3
#这里的加子查询的原因,要限制输出dt范围,而直接写在里面会影响ck1和ck2的运算,缩小了它的取值范围,结果不对
where dt>='2021-10-01'

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务