题解 | #工作日各时段叫车量、等待接单时间和调度时间#

工作日各时段叫车量、等待接单时间和调度时间

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

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务