题解|存疑#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

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
争当牛马还争不上
码农索隆:1.把简历改哈 2.猛投,狠投 3.把基础打牢 这样你在有机会的时候,才能抓住
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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