WITH t1 AS ( -- 1、先找出谁是被取消的司机 SELECT driver_id FROM tb_get_car_order WHERE DATE(order_time) BETWEEN '2021-10-01' AND '2021-10-07' AND start_time is NULL GROUP BY driver_id ), t2 AS ( SELECT driver_id, ROUND(AVG(grade),1) AS avg_grade FROM tb_get_car_order WHERE start_time is not NULL AND driver_id IN (SELECT t1.driver_id FROM t1) GROUP BY driver_id ORDER BY driver_id ASC ), t3 AS ( SELECT '总体' AS driver_id, ROUND(AVG(grade),1) AS avg_grade FROM tb_get_car_order WHERE start_time is not null AND driver_id IN (SELECT driver_id FROM t1) ) SELECT * FROM t2 UNION SELECT * FROM t3; # 这道题的关键在于先判断driver_id所属日期范围,再进行全局计算!