题解 | #国庆期间近7日日均取消订单量#
国庆期间近7日日均取消订单量
https://www.nowcoder.com/practice/2b330aa6cc994ec2a988704a078a0703
# 感觉和上一道困难题如出一辙。这道明显要简单许多 # 求近7日日均订单完成量和日均订单取消量 # 限制是国庆前三天每天的 # 尝试使用滑动窗口函数。 # 先统计最远的,2021-9-25到10-3每天的订单完成和取消量 # 再滑动统计日均完成和取消量 # 临时表,对日期分组,计算每天的成功订单数、未完成订单数 WITH temp_0 AS( SELECT DATE(order_time) dt, COUNT(fare) over_cnt, SUM(IF(fare, 0, 1)) fail_cnt FROM tb_get_car_order # 不要忘了限定时间范围 WHERE DATE(order_time) BETWEEN '2021-09-25' AND '2021-10-3' GROUP BY dt ORDER BY dt ) # 主查询,直接用滑动窗口函数求前6天到今天的均值即可。当然,这样求出来是每天都有记录,因此在最后限定跳过前6条,输出3条记录即可 SELECT dt, ROUND(AVG(over_cnt) OVER(ORDER BY dt ROWS 6 PRECEDING),2) finish_num_7d, ROUND(AVG(fail_cnt) OVER(ORDER BY dt ROWS 6 PRECEDING),2) cancel_num_7d FROM temp_0 ORDER BY dt LIMIT 6, 3
踩的坑:虽然写了要限定时间范围,但是写代码的时候第一次忘了,有个用例没通过才想起来