题解 | #2021年国庆在北京接单3次及以上的、
2021年国庆在北京接单3次及以上的司机统计信息
https://www.nowcoder.com/practice/992783fd80f746d49e790d33ee537c19
# 日期:2021.10.1-7;城市:北京;接单次数:>=3; # 求平均接单数和兼职收入 # 联结两个表,筛选出符合条件的记录,接单数应该是成功跑完单的 # 以司机id为依据分组求记录数,继续筛选出符合要求的司机id # 最后对接单数和收入求平均 # 临时表0 查询城市、司机id、收入、每个司机的跑单数(题意应该是有记录就算跑单,而不是必须完成接单,也就是fare字段有值才算) WITH temp_0 AS( SELECT city, driver_id, fare, COUNT(*) OVER(PARTITION BY driver_id) order_num FROM tb_get_car_record a JOIN tb_get_car_order b USING(order_id) # 加限制条件,本来还加了fare不能为空,但是这样会影响计算跑单量,可见只要在打车订单表里有就算跑了,不管跑没跑完 WHERE DATE(finish_time) BETWEEN '2021-10-01' AND '2021-10-07' AND city = '北京' ) # 主查询 选择城市,跑单量均值、收入均值 SELECT city, ROUND(AVG(order_num), 3), ROUND(AVG(order_fare), 3) FROM( # 子查询对司机分组,查每个司机的跑单总量,收入总额 SELECT MAX(city) city, MAX(order_num) order_num, SUM(fare) order_fare FROM temp_0 GROUP BY driver_id ) a # 筛选跑单量大于等于3的 WHERE order_num >= 3 GROUP BY city
简单题也不简单。在fare字段为空的筛选条件的坑待了半天。