明确题意
- 统计周一到周五各时段的叫车量、平均等待接单时间和平均调度时间
-
event_time-开始打车时间为时段划分依据
- 平均等待接单时间和平均调度时间均保留1位小数
-
结果按叫车量升序排序
问题拆解
1. 将表 tb_get_car_record 和 tb_get_car 根据 order_id 连接起来得到子表 tb
-
筛选工作日的叫车: WHERE DATE_FORMAT(event_time,'%W') NOT IN ( 'Saturday' ,'Sunday')
-
将 event_time 时间进行格式化,得到各时间的划分结果:CASE when...
- 计算等待接单时间:TIMESTAMPDIFF(SECOND,event_time,order_time)/60
- 计算调度时间:TIMESTAMPDIFF(SECOND,order_time,start_time)/60
2. 根据表 tb 计算工作日各时段叫车量、平均等待接单时间和平均调度时间
- 按时段分组:GROUP BY period
- 计算叫车量:COUNT(*) as get_car_num
- 计算平均等待接单时间:AVG(wait_time) avg_wait_time
- 计算平均调度时间:AVG(dispatch_time) avg_dispatch_time
- 保留1位小数:ROUND(x, 1)
代码
SELECT period, COUNT(*) get_car_num, ROUND(AVG(wait_time),1) avg_wait_time, ROUND(AVG(dispatch_time),1) avg_dispatch_time FROM ( SELECT CASE WHEN DATE_FORMAT(event_time,'%H-%i-%s') >= '07-00-00' AND DATE_FORMAT(event_time,'%H-%i-%s') < '09-00-00' THEN '早高峰' WHEN DATE_FORMAT(event_time,'%H-%i-%s') >= '09-00-00' AND DATE_FORMAT(event_time,'%H-%i-%s') < '17-00-00' THEN '工作时间' WHEN DATE_FORMAT(event_time,'%H-%i-%s') >= '17-00-00' AND DATE_FORMAT(event_time,'%H-%i-%s') < '20-00-00' THEN '晚高峰' ELSE '休息时间' END period, TIMESTAMPDIFF(SECOND,event_time,order_time)/60 wait_time, TIMESTAMPDIFF(SECOND,order_time,start_time)/60 dispatch_time, DATE_FORMAT(event_time,'%W') work_days FROM tb_get_car_record gcr LEFT JOIN tb_get_car_order gco ON gcr.order_id=gco.order_id WHERE DATE_FORMAT(event_time,'%W') NOT IN ( 'Saturday' ,'Sunday') ) tb GROUP BY period ORDER BY get_car_num



京公网安备 11010502036488号