首页 > 其他分享 >Hive 刷题——打车问题

Hive 刷题——打车问题

时间:2023-02-21 06:11:25浏览次数:40  
标签:00 20 09 Hive id 2021 time 打车 刷题

需求描述

现有用户下单表(get_car_record)如下。

uid
(用户id)
city
(城市)
event_time
(下单时间)
end_time
(结束时间:取消或者接单)
order_id
(订单id)
107 北京 2021-09-20 11:00:00 2021-09-20 11:00:30 9017
108 北京 2021-09-20 21:00:00 2021-09-20 21:00:40 9008
108 北京 2021-09-20 18:59:30 2021-09-20 19:01:00 9018
102 北京 2021-09-21 08:59:00 2021-09-21 09:01:00 9002

司机订单信息表(get_car_order)如下。

order_id
(课程id)
uid
(用户id)
driver_id
(用户id)
order_time
(接单时间)
start_time
(开始时间)
finish_time
(结束时间)
fare
(费用)
grade
(评分)
9017 107 213 2021-09-20 11:00:30 2021-09-20 11:02:10 2021-09-20 11:31:00 38 5
9008 108 204 2021-09-20 21:00:40 2021-09-20 21:03:00 2021-09-20 21:31:00 38 4
9018 108 214 2021-09-20 19:01:00 2021-09-20 19:04:50 2021-09-20 19:21:00 38 5

统计周一到周五各时段的叫车量、平均等待接单时间和平均调度时间。全部以event_time-开始打车时间为时段划分依据,平均等待接单时间和平均调度时间均保留2位小数,平均调度时间仅计算完成了的订单,结果按叫车量升序排序。

注:不同时段定义:早高峰 [07:00:00 , 09:00:00)、工作时间 [09:00:00 , 17:00:00)、晚高峰 [17:00:00 ,20:00:00)、休息时间 [20:00:00 , 07:00:00) 时间区间左闭右开(即7:00:00算作早高峰,而9:00:00不算做早高峰)

从开始打车到司机接单为等待接单时间,从司机接单到上车为调度时间

期望结果如下:

period
<string>
(时段)
get_car_num
<int>
(叫车量)
wait_time
<decimal(16,2)>
(等待时长)
dispatch_time
<decimal(16,2)>
(调度时长)
工作时间 1 0.50 1.67
休息时间 1 0.67 2.33
晚高峰 3 2.06 7.28
早高峰 4 2.21 8.00

参考实现

select period,
       count(order_id)                                                   get_car_num,
       cast(sum(wait_time) / 60 / count(order_id) as decimal(16, 2))     wait_time,
       cast(sum(dispatch_time) / 60 / count(order_id) as decimal(16, 2)) dispatch_time
from (select gr.order_id,
             case
                 when hour(event_time) >= 7 and hour(event_time) < 9 then '早高峰'
                 when hour(event_time) >= 9 and hour(event_time) < 17 then '工作时间'
                 when hour(event_time) >= 17 and hour(event_time) < 20 then '晚高峰'
                 else '休息时间' end                                     period,
             unix_timestamp(end_time) - unix_timestamp(event_time)   wait_time,
             unix_timestamp(start_time) - unix_timestamp(order_time) dispatch_time
      from get_car_record gr
               join get_car_order go on gr.order_id = go.order_id) t
group by period
order by 2 desc;\

标签:00,20,09,Hive,id,2021,time,打车,刷题
From: https://www.cnblogs.com/wdh01/p/17114860.html

相关文章

  • 算法刷题 Day 48 | ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
    今天就是打家劫舍的一天,这个系列不算难,大家可以一口气拿下。198.打家劫舍视频讲解:https://www.bilibili.com/video/BV1Te411N7SXhttps://programmercarl.com/0198.%......
  • 2023/02/20刷题
    B.EffectiveApproach链接B.EffectiveApproach用一个st数组记录每一个数据读入的下标,如果是正序寻找就是这个下标,如果是逆序寻找就是n减去这个下标,然后每种情况用......
  • 算法刷题 Day 46 | ● 139.单词拆分 ● 关于多重背包,你该了解这些!● 背包问题总结篇!
    关于多重背包,力扣上没有相关的题目,所以今天大家的重点就是回顾一波自己做的背包题目吧。139.单词拆分视频讲解:https://www.bilibili.com/video/BV1pd4y147Rhhttp......
  • 刷题日记
    刷题日记目录刷题日记leetcode算法基础双指针844.比较含退格的字符串986.区间列表的交集11.盛最多水的容器leetcode算法基础双指针844.比较含退格的字符串给......
  • 算法刷题 Day 44 | ● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
    力扣上没有纯粹的完全背包的题目,所以大家看本篇了解一下完全背包的理论后面的两道题目,都是完全背包的应用,做做感受一下完全背包视频讲解:https://www.bilibili.c......
  • 数据结构刷题2023.02.20小记
    排序算法最坏时间复杂度A:归并排序,是稳定排序,需要一个栈来维护,利用分治法思想每次分成两边分别排序再合并,具有稳定性,无论何时,其时间复杂度均为O(NlogN).B:快速排序,最坏情......
  • hive sql执行顺序
    1.from2.joinon或lateralviewexplode(需炸裂的列)tblas炸裂后的列名3.where4.groupby(开始使用select中的别名,从group开始往后都可用)5.聚合函数如Sum()avg()c......
  • hive数据倾斜优化
    1、什么是数据倾斜?由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点2、主要表现:任务进度长时间维持在99%或者100%的附近,查看任务监控页面,发现只有少量reduce......
  • 2023/02/19刷题+Educational Codeforces Round 143
    EducationalCodeforcesRound143链接EducationalCodeforcesRound143A题这个题,打比赛的时候看错了,考试结束补题的时候才发现,这个题其实很简单因为我们只能从栈......
  • 尚硅谷SQL刷题练习
    SQL一:查询累积销量排名第二的商品题目需求查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。......