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

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

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

一、解题思路

  1. 首先把用户打车记录表和打车订单表left join连接起来,用order_id等值连接;
  2. 用连接好的宽表,计算出每天的订单完成量和订单取消量,使用if()函数和sum函数嵌套即可,注意:日期以order_time字段为准(一开始使用event_time字段,提交时发现报错后改为了order_time),用date()函数将其转化为日期类型;
  3. 在上一步获得的临时表的基础上,计算出每天近7天的平均订单完成量和平均订单取消量,主要使用聚合窗口函数avg()over()的偏移聚合功能,注意:偏移量为6,计算结果保留2位小数;
  4. 在上一步获得的临时表的基础上,筛选出10/1~10/3期间的数据即可。

二、完整题解代码

with daily_order_cnt as
(select date(order_time)event_date,sum(if(order_id is not null and fare is not null and mileage is not null,1,0))order_finish,sum(if(start_time is null,1,0))order_cancel
from tb_get_car_record left join tb_get_car_order using(order_id)
group by date(order_time)
),
daily_rate as
(select event_date,round(avg(order_finish)over(order by event_date rows between 6 preceding and current row),2)sum_finish_rate,round(avg(order_cancel)over(order by event_date rows between 6 preceding and current row),2)sum_cancel
from daily_order_cnt
)
select *
from daily_rate
where event_date between '2021-10-01' and '2021-10-03'
order by event_date
;

三、提交结果截图

四、后记

本题解用了两次临时表,分了三步来实现,优点是思路简单清晰,缺点是代码较冗长,有优化空间。

全部评论

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务