题解 | #各城市最大同时等车人数#
各城市最大同时等车人数
https://www.nowcoder.com/practice/f301eccab83c42ab8dab80f28a1eef98
/*问题:请统计各个城市在2021年10月期间,单日中最大的同时等车人数。
注: 等车指从开始打车起,直到取消打车、取消等待或上车前的这段时间里用户的状态。
如果同一时刻有人停止等车,有人开始等车,等车人数记作先增加后减少。
结果按各城市最大等车人数升序排序,相同时按城市升序排序。
1.2021年10月
[1]where
2.等车计为1 取消等车计为-1 按照时间 union,根据城市时间计算累计,取得最大值
[1]case when
[2]unoin
[3]sum()over() 当同一时间有人等车 1 有人停止等车 -1,先+1 再 -1.即 累计时按等车状态的 逆序累计
[4]max
[等车状态为 开始打车起] [取消时间为 1.取消打车 2.取消等待 3.上车]*/
with data2 as
(select city,sum(uv)over(partition by city order by dt,uv desc) wait_uv
from
((#等车表
select a.uid,city,event_time dt,1 uv
from tb_get_car_record a
left join tb_get_car_order b using(order_id)
where date_format(event_time,'%Y%m')='202110')
union all
#结束等车表
(select a.uid,city,
case when order_id is null then end_time
when mileage is null then finish_time
else start_time end dt,-1 uv
from tb_get_car_record a
left join tb_get_car_order b using(order_id)
where date_format(event_time,'%Y%m')='202110'))data1)
select city,max(wait_uv) max_wait_uv
from data2
group by city
order by max_wait_uv,city

查看2道真题和解析