SELECT department, round(avg(real_salary),2) AS average_actual_salary, IFNULL(round(avg(CASE WHEN staff_gender = 'male' THEN real_salary END),2),0) AS average_actual_salary_male, IFNULL(round(avg(CASE WHEN staff_gender = 'female' THEN real_salary END),2),0) AS average_actual_salary_female FROM( SELECT a.staff_id,a.staff_gender,a.department,b.normal_salary - b.dock_salary AS real_salary FROM staff_tb AS a JOIN salary_tb AS b ON a.staff_id = b.staff_id ) AS c GROUP BY department ORDER BY average_actual_salary DESC
这个题比较简单,我用了两层SELECT,第一层的先把两表连起来保留id,性别,部门和真实工资,第二层使用GROUP BY计算出平均薪资就好了,男女平均薪资在avg函数中加上CASE WHEN进行判断就好了