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

with avg_dep as (
     select 
         department,
         round(avg(normal_salary-dock_salary), 2) as average_actual_salary
     from
         staff_tb
         join salary_tb on staff_tb.staff_id = salary_tb.staff_id
     group by 
         department
 ),
 avg_dep_male as (
     select 
         department,
         round(avg(normal_salary-dock_salary), 2) as average_actual_salary_male
     from
         staff_tb
         join salary_tb on staff_tb.staff_id = salary_tb.staff_id
     where
         staff_gender = 'male'
     group by 
         department
 ),
 avg_dep_female as (
     select 
         department,
         round(avg(normal_salary-dock_salary), 2) as average_actual_salary_female
     from
         staff_tb
         join salary_tb on staff_tb.staff_id = salary_tb.staff_id
     where
         staff_gender = 'female'
     group by 
         department
 )
 select
     avg_dep.department,
     ifnull(average_actual_salary, 0.00) as average_actual_salary,
     ifnull(average_actual_salary_male, 0.00) as average_actual_salary_male,
     ifnull(average_actual_salary_female, 0.00) as average_actual_salary_female
 from
     avg_dep
     left join avg_dep_male on avg_dep.department = avg_dep_male.department
     left join avg_dep_female on avg_dep.department = avg_dep_female.department
 order by 
     average_actual_salary desc