select 
    sf.department,
    round(avg(sy.normal_salary - sy.dock_salary), 2) as average_actual_salary,
    ifnull(round(avg(if(sf.staff_gender='male',sy.normal_salary - sy.dock_salary,null)),2),0.00) as average_actual_salary_male,
    ifnull(round(avg(if(sf.staff_gender='female',sy.normal_salary - sy.dock_salary,null)),2),0.00) as average_actual_salary_female
from staff_tb sf
     join salary_tb sy on sf.staff_id = sy.staff_id
group by department
order by average_actual_salary desc

IF(sf.staff_gender = 'male', sy.normal_salary - sy.dock_salary, NULL)

只对男性员工计算 正常工资 - 扣款工资,其他人返回 NULL

(即不参与平均值计算)

AVG(...)

计算上述结果的平均值(只会对非 NULL 项生效)

ROUND(..., 2)

保留两位小数

IFNULL(..., 0.00)

如果结果为 NULL(比如压根没有男员工),则返回默认值 0.00