with
tb1 as(
select staff_id, staff_gender, department from staff_tb
),
tb2 as(
select staff_id, normal_salary - dock_salary as actual_salary from salary_tb
),
tb3 as(
select department, ifnull(round(avg(actual_salary), 2), 0) as average_actual_salary from tb1
join tb2 on tb1.staff_id = tb2.staff_id
group by department
order by average_actual_salary desc
),
tb4 as(
select department, ifnull(round(avg(actual_salary), 2), 0) as
average_actual_salary_male from tb1
left join tb2 on tb1.staff_id = tb2.staff_id and tb1.staff_gender = 'male'
group by department
),
tb5 as(
select department, ifnull(round(avg(actual_salary), 2), 0) as
average_actual_salary_female from tb1
left join tb2 on tb1.staff_id = tb2.staff_id and tb1.staff_gender = 'female'
group by department
)
select tb3.department, tb3.average_actual_salary, tb4.average_actual_salary_male,
tb5.average_actual_salary_female from tb3
left join tb4 on tb3.department = tb4.department
left join tb5 on tb3.department = tb5.department