with t as(
select
t2.department,
t2.staff_gender,
t1.normal_salary-t1.dock_salary as actual_salary
from salary_tb t1 left join staff_tb t2
on t1.staff_id=t2.staff_id)

select
t1.department,
t1.average_actual_salary,
case when 
    t2.average_actual_salary is null then 0 else
    t2.average_actual_salary end as average_actual_salary_male,
case when 
    t3.average_actual_salary is null then 0 else
    t3.average_actual_salary end as average_actual_salary_female

from

(select
department,
round(avg(actual_salary),2) as average_actual_salary
from t
group by department) t1

left join

(select
department,
round(avg(actual_salary),2) as average_actual_salary
from t
where staff_gender='male'
group by department) t2

on t1.department=t2.department

left join

(select
department,
round(avg(actual_salary),2) as average_actual_salary
from t
where staff_gender='female'
group by department) t3

on t1.department=t3.department

order by t1.average_actual_salary desc