题解 | #工作日各时段叫车量、等待接单时间和调度时间#
工作日各时段叫车量、等待接单时间和调度时间
https://www.nowcoder.com/practice/34f88f6d6dc549f6bc732eb2128aa338
#新知识点: 获取日期的星期几函数: dayofweek(date) 从周日开始[1,7],weekday从周一开始[0,6]
# 问题:统计周一到周五各时段的叫车量、平均等待接单时间和平均调度时间。 全部以event_time-开始打车时间为时段划分依据。
# 对tb_get_car_record 的event_time进行划分:星期几、不同时段
WITH time_table as (
SELECT order_id
,dayofweek(event_time)-1 as weekday #dayofweek从周日开始,不习惯,-1变成从周一开始
,CASE
WHEN hour(event_time) in (7,8) THEN '早高峰'
WHEN hour(event_time) BETWEEN 9 AND 16 THEN '工作时间'
WHEN hour(event_time) BETWEEN 17 AND 19 THEN '晚高峰'
ELSE '休息时间'
END as period
,timestampdiff(second,event_time,end_time) wait_time
FROM tb_get_car_record )
# 平均等待接单时间和平均调度时间均保留1位小数,平均调度时间仅计算完成了的订单,结果按叫车量升序排序。
# 从开始打车到司机接单为等待接单时间,从司机接单到上车为调度时间。
SELECT period
,COUNT(order_id) get_car_num
,round((sum(wait_time)/count(distinct date(order_time)))/60 ,1) avg_wait_time
,round( (sum(timestampdiff(second,order_time,start_time)) /count(distinct date(order_time)) )/60,1) avg_dispatch_time
FROM time_table
JOIN tb_get_car_order USING(order_id)
WHERE weekday BETWEEN 1 AND 5
GROUP BY period
order by get_car_num,avg_wait_time