В настоящее время у меня есть две версии SQL-запроса, и я пытаюсь понять, какая из них может быть лучше с точки зрения производительности, стоимости и т. Д.
Это вопрос к этому вопросу: Средняя зарплата: Отделы VS Компания
select department_salary.pay_month, department_id,
case
when department_avg>company_avg then 'higher'
when department_avg<company_avg then 'lower'
else 'same'
end as comparison
from
(
select department_id,
avg(amount) as department_avg,
date_format(pay_date, '%Y-%m') as pay_month
from salary
join employee on salary.employee_id = employee.employee_id
group by department_id, pay_month
) as department_salary
join
(
select avg(amount) as company_avg,
date_format(pay_date, '%Y-%m') as pay_month
from salary
group by date_format(pay_date, '%Y-%m')
) as company_salary
on department_salary.pay_month = company_salary.pay_month
;
Мой вопрос - вместо того, чтобы присоединиться, они могли бы вместо этого использовать вторую таблицу в самом операторе case.
select a.pay_month,
a.department_id,
(case when avg(a.salary) > (
select avg(e.salary)
from employee e
where e.pay_month = a.pay_month)
then 'higher'
else 'lower' end) as comparison
from employee a
group by a.pay_month,a.department_id;
Что лучше?Действительно ли необходимо объединение?