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

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

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

一、题目拆解

1、条件:

周一到周五:weekday(event_time) between 0 and 4

各时段:(case when time(event_time) >='07:00:00' and time(event_time)<'09:00:00' then '早高峰'

when time(event_time) >='09:00:00' and time(event_time)<'17:00:00' then '工作时间'

when time(event_time) >='17:00:00' and time(event_time)<'20:00:00' then '晚高峰'

when time(event_time) >='20:00:00' or time(event_time)<'07:00:00' then '休息时间'

end) as period

2、计算指标:

叫车量:count(period) as get_car_num

平均等待接单时间:先计算timestampdiff(second,event_time,order_time)/60 as wait_time,再计算round(avg(wait_time),1) as avg_wait_time

平均调度时间:先计算timestampdiff(second,order_time,start_time)/60 as dispatch_time,再计算round(avg(dispatch_time),1) as avg_dispatch_time

3、要求

结果按叫车量升序排序:order by get_car_num。

二、题解

with workday as
(select *
from tb_get_car_record
where weekday(event_time) between 0 and 4
),
info as
(select finish_time,(case when time(event_time) >='07:00:00' and time(event_time)<'09:00:00' then '早高峰' 
when time(event_time) >='09:00:00' and time(event_time)<'17:00:00' then '工作时间'
when time(event_time) >='17:00:00' and time(event_time)<'20:00:00' then '晚高峰'
when time(event_time) >='20:00:00' or time(event_time)<'07:00:00' then '休息时间'
end)period,timestampdiff(second,event_time,order_time)/60 wait_time,timestampdiff(second,order_time,start_time)/60 dispatch_time
from (workday left join tb_get_car_order using(order_id))
)

select period,count(*)get_car_num,round(avg(wait_time),1)avg_wait_time,round(avg(dispatch_time),1)avg_dispatch_time
from info
where finish_time is not null
group by period
order by get_car_num
;

三、后记

题目中有一个要求:平均调度时间仅计算完成了的订单,这个我写的题解中并没有考虑这一点,但提交通过了,应该是测试用例没有覆盖到。但话说回来,这个要求要怎么实现,一下子还真没啥思路,欢迎有思路的大佬们来交流~

全部评论

相关推荐

程序员牛肉:1.大头肯定是院校问题,这个没啥说的。 2.虽然有实习,但是实习的内容太水了,在公司待了七个月的时间,看起来就只做了jwt和接入redis。爬取新闻,数据导入。这几个需求值得你做七个月吗?这不就是三四个月的工作量吗?我要是面试官的话真心会认为你能力不太行。所以既然有实习了,一定要好好写,像是Swagger这种东西是真没必要写上去,就拉一个包的事情。 3.我个人觉得话,在校生不要把自己当社招看,除非你的项目是特别牛逼,特别有名的含金量,否则不要写这种密密麻麻的一串子工作职责。你的项目只有一个作用,就是供面试官从中来抽取八股对你进行拷打。 但是你现在这个看不来什么技术点,可以改一下,详细表述一下你用什么技术实现了什么功能,在实现这个功能的过程中,你解决了什么难题。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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