题解 | #SQL 20.有取消订单记录的司机平均评分#

有取消订单记录的司机平均评分

http://www.nowcoder.com/practice/f022c9ec81044d4bb7e0711ab794531a

有取消订单记录的司机平均评分

明确题意:

找到2021年10月有过取消订单记录的司机,计算他们每人全部已完成的有评分订单的平均评分及总体平均评分,保留1位小数。


问题分解:

  • 找出2021年10月有取消订单的司机:WHERE DATE_FORMAT(order_time, "%Y-%m")='2021-10' AND ISNULL(fare)
  • 筛选他们的已完成订单的评分:WHERE driver_id in (...) AND NOT ISNULL(grade)
  • 按司机分组:GROUP BY driver_id
  • 追加汇总信息:WITH ROLLUP
  • 输出每个司机的平均评分:
    • 司机ID或总体:IFNULL(driver_id, "总体") as driver_id
    • 平均评分:AVG(grade) as avg_grade
    • 保留1位小数:ROUND(x, 1)

细节问题:

  • 表头重命名:as

完整代码:

SELECT IFNULL(driver_id, "总体") as driver_id,
    ROUND(AVG(grade), 1) as avg_grade
FROM tb_get_car_order
WHERE driver_id in (
    SELECT driver_id
    FROM tb_get_car_order
    WHERE DATE_FORMAT(order_time, "%Y-%m")='2021-10' AND ISNULL(fare)
) AND NOT ISNULL(grade)
GROUP BY driver_id
WITH ROLLUP;
SQL大厂真题 文章被收录于专栏

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

全部评论
第一次见 WITH ROLLUP ,很赞!
1 回复 分享
发布于 2022-04-24 12:28
请问你这个排序怎么实现的呢?
点赞 回复 分享
发布于 2022-05-26 10:19
AND NOT ISNULL(grade)是不是不需要呀?avg本来就会忽略null吧
点赞 回复 分享
发布于 2022-07-12 03:54
为什么把ISNULL(fare) 改为 fare IS NULL 会出错
点赞 回复 分享
发布于 2023-04-07 18:52 湖北
为什么fare 和 grade 分别不为null 的条件都要有,grade不为null 不可以吗
点赞 回复 分享
发布于 2023-07-11 09:34 北京
请问筛选司机编号的子查询为啥不用加表名,加上表名就出错
点赞 回复 分享
发布于 2023-07-11 09:57 北京
为什么把group by order_id 改成group by 1结果还是显示不了汇总呢?(汇总还是null)
点赞 回复 分享
发布于 2023-08-13 16:15 湖北

相关推荐

自来熟的放鸽子能手面试中:绷不住了
点赞 评论 收藏
分享
35 4 评论
分享
牛客网
牛客企业服务