With
t_salary AS(
SELECT
t1.department,
ROUND(AVG(t2.normal_salary - t2.dock_salary),2) avg_salary
FROM staff_tb t1
INNER JOIN salary_tb t2
ON t1.staff_id = t2.staff_id
GROUP BY t1.department
),
m_salary as(
SELECT
t1.department,
IFNULL(ROUND(AVG(t2.normal_salary - t2.dock_salary),2),'0.00') average_actual_salary_male
FROM staff_tb t1
LEFT JOIN salary_tb t2
ON t1.staff_id = t2.staff_id
WHERE t1.staff_gender = 'male'
GROUP BY t1.department
),
f_salary as(
SELECT
t1.department,
IFNULL(ROUND(AVG(t2.normal_salary - t2.dock_salary),2),'0.00') average_actual_salary_female
FROM staff_tb t1
LEFT JOIN salary_tb t2
ON t1.staff_id = t2.staff_id
WHERE t1.staff_gender = 'female'
GROUP BY t1.department
)
SELECT
a1.department,
a1.avg_salary average_actual_salary,
IFNULL(b1.average_actual_salary_male,'0.00') average_actual_salary_male,
c1.average_actual_salary_female
FROM t_salary a1
LEFT JOIN m_salary b1
ON a1.department = b1.department
LEFT JOIN f_salary c1
ON a1.department = c1.department
ORDER BY average_actual_salary DESC