with t as (
    select department, staff_gender, normal_salary-dock_salary as actual_salary
    from staff_tb a join salary_tb b on a.staff_id=b.staff_id
), t_average_actual_salary as (
    select department, round(avg(actual_salary), 2) as average_actual_salary
    from t
    group by department
), t_average_actual_salary_male as (
    select department,  round(avg(actual_salary), 2) as average_actual_salary_male
    from t
    where staff_gender='male'
    group by department
), t_average_actual_salary_female as (
    select department,  round(avg(actual_salary), 2) as average_actual_salary_female
    from t
    where staff_gender='female'
    group by department
)
select t1.department, average_actual_salary, 
ifnull(average_actual_salary_male, 0.0) as average_actual_salary_male, 
ifnull(average_actual_salary_female, 0.0) as average_actual_salary_female
from t_average_actual_salary t1
left join t_average_actual_salary_male t2 on t1.department=t2.department
left join t_average_actual_salary_female t3 on t1.department=t3.department
order by average_actual_salary desc