select weather_type ,ROUND(avg(delivery_time),2) as average_delivery_time ,count(is_complaint) as delivery_count from delivery_records as dr join weather_conditions as wc on dr.weather_id = wc.weather_id join delivery_staff as ds on dr.staff_id = ds.staff_id where average_speed > 20 and dr.staff_id in ( SELECT staff_id from delivery_records group by staff_id having sum(is_complaint) / count(is_complaint) < 0.5 ) group by weather_type order by weather_type ASC;