#先找出符合条件的配送员
WITH satff_filter AS (
SELECT
staff_id
FROM
(
SELECT
ds.staff_id,
SUM(dr.is_complaint) / COUNT(*) AS cr
FROM
delivery_staff AS ds
INNER JOIN
delivery_records AS dr ON ds.staff_id = dr.staff_id
WHERE
average_speed > 20
GROUP BY
staff_id
HAVING
cr < 0.5
) AS satff
)
#将符合条件的配送员和其他表连接
SELECT
w.weather_type,
ROUND(AVG(dr.delivery_time),2) AS average_delivery_time,
COUNT(*) AS delivery_count
FROM
satff_filter AS sf
INNER JOIN
delivery_records AS dr ON sf.staff_id=dr.staff_id
INNER JOIN
weather_conditions AS w ON dr.weather_id=w.weather_id
GROUP BY
w.weather_type;