Как найти сотрудников с зарплатой выше средней по своему отделу?
Уровень: Middle
Ответ
Нужно сравнить зарплату сотрудника со средней зарплатой по тому же отделу. Это можно сделать с коррелированным подзапросом: SELECT * FROM Employee e WHERE e.salary > (SELECT AVG(salary) FROM Employee WHERE department_id = e.department_id). В подзапросе рассчитывается средняя зарплата по отделу текущего сотрудника, и условие HAVING/WHERE отбирает только тех, чья зарплата превышает этот средний уровень. Аналогичного результата можно достичь с JOIN: сначала вычислить AVG по отделам в CTE или временной таблице, затем соединить с Employees и выбрать сотрудников, у которых salary больше, чем среднее из рассчитанной таблицы.