题解 | #SQL 19.2021年国庆在北京接单3次及以上的司机统计信息#

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

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

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

明确题意:

统计2021年国庆7天期间在北京市接单至少3次的司机的平均接单数和平均兼职收入(暂不考虑平台佣金,直接计算完成的订单费用总额),结果保留3位小数。


问题分解:

  • 计算2021国庆在北京接单至少3次的司机信息:
    • 关联接单表和打车记录表: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'
    • 按司机ID分组:GROUP BY driver_id
    • 统计每个司机的接单量和接单收入:COUNT(order_id) as order_num, SUM(fare) as income
    • 筛选接单至少3次的分组(司机):HAVING COUNT(order_id) >= 3
  • 基于上述结果,统计他们的平均接单量和平均收入:
    • 平均接单量:AVG(order_num) as avg_order_num
    • 平均收入:AVG(income) as avg_income
  • 保留3位小数:ROUND(x, 3)

细节问题:

  • 表头重命名:as

完整代码:

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;
SQL大厂真题 文章被收录于专栏

大厂真题手把手教你怎么解~

全部评论
在子查询,可以直接select city么?为何需要‘北京’ as city呢?
1 回复
分享
发布于 2022-05-06 15:21
有一个缺陷,SUM(ifnull(fare,0))更严谨
点赞 回复
分享
发布于 2022-02-18 11:03
滴滴
校招火热招聘中
官网直投
妙啊!
点赞 回复
分享
发布于 2022-05-17 15:57
select '北京' as city,round(avg(order_num),3) as avg_order_num,round(avg(fare_num),3) as avg_income from ( select driver_id,count(a.order_id) order_num,sum(fare) as fare_num from tb_get_car_order a left join tb_get_car_record b on a.uid=b.uid where city='北京' and date(event_time) between '2021-10-01' and '2021-10-07' and order_time is not null group by driver_id having count(a.order_id)>=3 ) t; 请问这样为什么不对呢
点赞 回复
分享
发布于 2022-10-15 11:08 浙江
用order_id关联表
点赞 回复
分享
发布于 2023-02-09 11:05 上海
select "北京" as city, round(avg(num),3) avg_order_num, avg(income) avg_income from( select driver_id, count(order_id) num, sum(fare) income from tb_get_car_record right join tb_get_car_order using(order_id) where city = '北京' and order_time between'2021-10-01' and '2021-10-07' group by driver_id having num > 3 )t1
点赞 回复
分享
发布于 2023-06-05 17:38 广东

相关推荐

头像
04-26 15:00
已编辑
算法工程师
点赞 评论 收藏
转发
26 2 评论
分享
牛客网
牛客企业服务