1、分析题目:
统计周一到周五各时段的叫车量、平均等待接单时间和平均调度时间。全部以event_time-开始打车时间为时段划分依据,平均等待接单时间和平均调度时间均保留1位小数,平均调度时间仅计算完成了的订单,结果按叫车量升序排序。
①周1-周5:    dayofweek:1:星期天👉7:星期六  /  weekday:0:星期一👉6:星期日
②各时段:早高峰 [07:00:00 , 09:00:00)、工作时间 [09:00:00 , 17:00:00)、晚高峰 [17:00:00 , 20:00:00)、休息时间 [20:00:00 , 07:00:00) 👉  case when & extract(hour from xxx) & in & between and
③保留1位小数:round(xxx,1)
④平均调度时间仅计算完成了的订单:start_time is not null

2、实操:
①创建临时的时间区间表:提取每个订单的 “hour” ,从而为后续分类做准备
with time
as(
    select extract(hour from t1.event_time) as difference,
    case when t1.event_time is not null then 1 else 0 end as car_num,
	注意:原因:由于展示结果精确到了秒,因此此处先按照 “秒” 进行计算更符合需求
    timestampdiff(second,t1.event_time,t2.order_time) as wait_time,
    timestampdiff(second,t2.order_time,t2.start_time) as dispatch_time
    from tb_get_car_record as t1
    left join tb_get_car_order as t2
    on t1.order_id = t2.order_id
	注意:此处要筛选周1-周5的数据
    where dayofweek(t1.event_time) between 2 and 6
)

②根据上一步挑选出的hour进行分类统计
select case when difference in (7,8) then '早高峰'
    when difference between 9 and 16 then '工作时间'
    when difference in (17,18,19) then '晚高峰'
    else '休息时间'
    end,
sum(car_num) as get_car_num,
round(avg(wait_time/60) ,1) as avg_wait_time,
round(avg(dispatch_time/60) ,1) as avg_dispatch_time
from time
group by 1
order by 2