题解 | #各城市最大同时等车人数#
各城市最大同时等车人数
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 ;

