select
department,
average_actual_salary,
if(average_actual_salary_male is null,0.00,average_actual_salary_male) as average_actual_salary_male,
if(average_actual_salary_female is null,0.00,average_actual_salary_female) as average_actual_salary_female
from
(
select
department,
round(avg(normal_salary - dock_salary), 2) as average_actual_salary,
round(
sum(
case
when staff_gender = 'male' then (normal_salary - dock_salary)
else 0
end
) / sum(
case
when staff_gender = 'male' then 1
else 0
end
),
2
) as average_actual_salary_male,
round(
sum(
case
when staff_gender = 'female' then (normal_salary - dock_salary)
else 0
end
) / sum(
case
when staff_gender = 'female' then 1
else 0
end
),
2
) as average_actual_salary_female
from
staff_tb
join salary_tb using (staff_id)
group by
department
) as t
order by
average_actual_salary desc
这个写法效率上不是最优的,但是思路比较清晰,纯用来速通做题



京公网安备 11010502036488号