题解 | #国庆期间近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'
腾讯成长空间 5960人发布
查看3道真题和解析