题解 | 统计骑手信息

统计骑手信息

https://www.nowcoder.com/practice/704de2445ed943c6bf65cfd77bd69ff4

with a1 as (
    select 
    zone_id,
    courier_id,
    courier_name,
    count(*) as courier_count,
    rank() over(partition by zone_id order by count(*) desc ,courier_id) as rk # partition by 和 count 的口径不同
    from Orders
    join Zones
    using(zone_id)
    join Couriers
    using(courier_id) 
    where HOUR(order_time) BETWEEN 11 AND 13 OR HOUR(order_time) BETWEEN 18 AND 20 
    and status='delivered'
    and order_time between '2024-02-01' and '2024-02-29'
    group by zone_id,courier_id,courier_name
)

select 
zone_id,
zone_name,
sum(case when order_time between '2023-02-01' and '2023-02-28' then 1 else 0 end) as peak_2023_02_delivered,
sum(case when order_time between '2024-02-01' and '2024-02-29' then 1 else 0 end) as peak_2024_02_delivered,
sum(case when order_time between '2024-01-01' and '2024-01-31' then 1 else 0 end) as peak_2024_01_delivered,
sum(case when order_time between '2024-02-01' and '2024-02-29' then 1 else 0 end)-sum(case when order_time between '2023-02-01' and '2023-02-28' then 1 else 0 end) as yoy_delta,
sum(case when order_time between '2024-02-01' and '2024-02-29' then 1 else 0 end)-sum(case when order_time between '2024-01-01' and '2024-01-31' then 1 else 0 end) as mom_delta,
round(avg(case when order_time between '2024-02-01' and '2024-02-29' then TIMESTAMPDIFF(MINUTE, order_time, delivered_time) end),2) as avg_peak_minutes_2024_02,
max(a1.courier_name) as top_courier_2024_02
from Orders
join Zones
using(zone_id)
join Couriers
using(courier_id)
join a1 
using(zone_id)
where (HOUR(order_time) BETWEEN 11 AND 13 OR HOUR(order_time) BETWEEN 18 AND 20)  # 带OR的请带括号,不然易和后面的AND混淆
and status='delivered'
and rk = 1 
group by zone_id,zone_name
order by zone_id,zone_name

全部评论

相关推荐

等闲_:小红书基本不区分日常和暑期,你是应届实习时间够了就有转正机会,只要部门有hc
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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