题解 | #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字段为空的筛选条件的坑待了半天。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务