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

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

https://www.nowcoder.com/practice/34f88f6d6dc549f6bc732eb2128aa338

-- 思路:

  • -- 1.筛选出工作日的所有打车记录,对时间进行格式化处理取出对应时间
  • -- 2.构建period时间范围字段,按照period分组统计平均等待时间和平均调度时间

核心函数:TIMESTAMPDIFF()与 DAYOFWEEK()

-- 思路:
--      1.筛选出工作日的所有打车记录,对时间进行格式化处理取出对应时间
--      2.构建period时间范围字段,按照period分组统计平均等待时间和平均调度时间
with
    t as (
        select
            time(date_format (event_time, '%H:%i:%s')) as event_time,
            o.order_id,
            time(date_format (order_time, '%H:%i:%s')) as order_time,
            time(date_format (start_time, '%H:%i:%s')) as start_time,
            fare
        from
            tb_get_car_order o
            join tb_get_car_record r on o.order_id = r.order_id
        where
            dayofweek (event_time) between 2 and 6
    )
select
    case
        when event_time >= '07:00:00'
        and event_time < '09:00:00' then '早高峰'
        when event_time >= '09:00:00'
        and event_time < '17:00:00' then '工作时间'
        when event_time >= '17:00:00'
        and event_time < '20:00:00' then '晚高峰'
        else '休息时间'
    end as period,
    count(order_id) as get_car_num,
    round(
        sum(TIMESTAMPDIFF (second, event_time, order_time)) / (count(order_id) * 60),
        1
    ) as avg_wait_time,
    round(
        sum(TIMESTAMPDIFF (second, order_time, start_time)) / (count(if (fare is not null, order_id, null)) * 60),
        1
    ) as avg_dispatch_time
from
    t
group by
    period
order by
    get_car_num
SQL大厂面试题 文章被收录于专栏

牛客网sql大厂面试题题解~

全部评论

相关推荐

双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务