SELECT 
    department,
    ROUND(AVG(actual_salary), 2) AS average_actual_salary,
    ROUND(
        IFNULL(
            AVG(CASE WHEN staff_gender = 'male' THEN actual_salary END)
        , 0), 
    2) AS average_actual_salary_male,
    ROUND(
        IFNULL(
            AVG(CASE WHEN staff_gender = 'female' THEN actual_salary END)
        , 0), 
    2) AS average_actual_salary_female
FROM (
 
    SELECT 
        s.staff_id,
        s.staff_name,
        s.staff_gender,
        s.department,
        (sa.normal_salary - sa.dock_salary) AS actual_salary
    FROM staff_tb s
    JOIN salary_tb sa ON s.staff_id = sa.staff_id
) t
GROUP BY department
ORDER BY average_actual_salary DESC;