WITH dep AS( SELECT staff_id,department,staff_gender FROM staff_tb ) SELECT b.department, round(avg(a.normal_salary-a.dock_salary),2) AS average_actual_salary, coalesce(round(avg(IF(b.staff_gender='male',a.normal_salary-a.dock_salary,NULL)),2),0.00) AS average_actual_salary_male,--此处不能先补后填充Null值,不然mean value可能不准确 coalesce(round(avg(IF(b.staff_gender='female',a.normal_salary-a.dock_salary,NULL)),2),0.00) AS average_actual_salary_female FROM salary_tb AS a LEFT JOIN dep AS b ON a.staff_id=b.staff_id GROUP BY b.department ORDER BY round(avg(a.normal_salary-a.dock_salary),2) DESC;