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所属日期范围,再进行全局计算!