题解 | #各城市最大同时等车人数#

各城市最大同时等车人数

https://www.nowcoder.com/practice/f301eccab83c42ab8dab80f28a1eef98

-- 建立子表,用union all 全连接
with t1 as(
SELECT -- 用户进入打车状态 记为1重命名为uv
       city,
       event_time uv_time,
       1 uv -- 进入打车状态
FROM tb_get_car_record
    UNION ALL
SELECT -- 司机接单前取消,则没有生成order_id,这种情况 order_id IS NULL 记录end_time
       city,
       end_time uv_time,
       -1 uv -- 结束等车,记为 -1 为uv
FROM tb_get_car_record
WHERE order_id IS NULL
    UNION ALL
SELECT -- 司机接单后取消或正常上车
       city,
       ifnull(start_time,finish_time) uv_time,
       -1 uv -- 结束打车后记录结束时间 记为-1
FROM tb_get_car_order
JOIN tb_get_car_record USING(order_id)
),t2 AS
(SELECT
       city, -- 下边排序一定要有根据uv降序排序,不然会报错,先进后出
       sum(uv) OVER(PARTITION BY city ORDER BY uv_time,uv desc) AS uv_cnt
FROM t1
WHERE date_format(uv_time,"%Y-%m") = '2021-10')
SELECT
       city,
       max(uv_cnt) max_wait_uv
FROM t2
GROUP BY city -- 结果按各城市最大等车人数升序排序,相同时按城市升序排序。
ORDER BY max_wait_uv ASC ,city ASC ;

全部评论

相关推荐

爱读书的放鸽子能手很...:刷个两端实习,冲春招,流水线什么时候不能去
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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