select s.department, round(avg(a.normal_salary-a.dock_salary),2) average_actual_salary, ifnull(round(avg(case when s.staff_gender='male' then a.normal_salary-a.dock_salary end),2),0.00) average_actual_salary_male, ifnull(round(avg(case when s.staff_gender='female' then a.normal_salary-a.dock_salary end),2),0.00) average_actual_salary_female from staff_tb s join salary_tb a on s.staff_id=a.staff_id group by s.department order by average_actual_salary desc
1、avg()会自动忽略空值,不计数
2、如果人数为0,avg()会返回空值
3、ifnull(字段,0) 实现将字段中的空值转0
对于双重计数的情况,可将上一级用group by ,下一级用case when
另外,avg的使用可以免去计数count

京公网安备 11010502036488号