题解|存疑#2021年国庆在北京接单3次及以上的统计信息#

2021年国庆在北京接单3次及以上的司机统计信息

https://www.nowcoder.com/practice/992783fd80f746d49e790d33ee537c19

# SELECT "北京" as city, ROUND(AVG(order_num), 3) as avg_order_num,
#     ROUND(AVG(income), 3) as avg_income
# FROM (
#     SELECT driver_id, COUNT(order_id) as order_num, SUM(fare) as income
#     FROM tb_get_car_order
#     JOIN tb_get_car_record USING(order_id)
#     WHERE city = "北京" and DATE_FORMAT(order_time,"%Y%m%d") BETWEEN '20211001' AND '20211007'
#     GROUP BY driver_id
#     HAVING COUNT(order_id) >= 3
# ) as t_driver_info;


SELECT '北京' AS city,ROUND(AVG(order_num),3) AS avg_order_num, ROUND(AVG(income),3) AS avg_income
FROM(
    SELECT driver_id,COUNT(a.order_id) AS order_num, SUM(fare) AS income
    FROM tb_get_car_order a
    JOIN tb_get_car_record b
    ON a.order_id = b.order_id
    WHERE DATE_FORMAT(order_time,'%Y-%m-%d') BETWEEN '2021-10-01' AND '2021-10-07' AND city = '北京'
    GROUP BY driver_id
    HAVING COUNT(a.order_id) >= 3   
)t1

这里有一些bug就是:如果在子查询SELECT中写入city,会因为driver_id,city和GROUP BY driver_id之间产生矛盾。
第一个解决方法是在第一个查询里直接SELECT ‘北京’ AS city (如上)

第二个解决方法是按照GROUP BY city,driver_id在子查询中进行分组之后,再次在最外层查询中使用GROUP BY city
进行分组 (如下)
SELECT city,ROUND(AVG(order_num),3) AS avg_order_num, ROUND(AVG(income),3) AS avg_income
FROM(
    SELECT city,driver_id,COUNT(a.order_id) AS order_num, SUM(fare) AS income
    FROM tb_get_car_order a
    JOIN tb_get_car_record b
    ON a.order_id = b.order_id
    WHERE DATE_FORMAT(order_time,'%Y-%m-%d') BETWEEN '2021-10-01' AND '2021-10-07' AND city = '北京'
    GROUP BY driver_id,city
    HAVING COUNT(a.order_id) >= 3   
)t1
GROUP BY city

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务