select department, average_actual_salary, if(average_actual_salary_male is null,0.00,average_actual_salary_male) as average_actual_salary_male, if(average_actual_salary_female is null,0.00,average_actual_salary_female) as average_actual_salary_female from ( select department, round(avg(normal_salary - dock_salary), 2) as average_actual_salary, round( sum( case when staff_gender = 'male' then (normal_salary - dock_salary) else 0 end ) / sum( case when staff_gender = 'male' then 1 else 0 end ), 2 ) as average_actual_salary_male, round( sum( case when staff_gender = 'female' then (normal_salary - dock_salary) else 0 end ) / sum( case when staff_gender = 'female' then 1 else 0 end ), 2 ) as average_actual_salary_female from staff_tb join salary_tb using (staff_id) group by department ) as t order by average_actual_salary desc
这个写法效率上不是最优的,但是思路比较清晰,纯用来速通做题