Для дневных снимков зарплат используйте AVG(salary) OVER (PARTITION BY department_id, salary_date). Окно добавит среднее, не сворачивая исходные строки.
Для каждой строки в таблице salaries вывести имя сотрудника, дату, зарплату и, используя оконную функцию, добавить столбец "средняя зарплата по отделу на эту дату".
Для дневных снимков зарплат используйте AVG(salary) OVER (PARTITION BY department_id, salary_date). Окно добавит среднее, не сворачивая исходные строки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для дневных снимков зарплат используйте AVG(salary) OVER (PARTITION BY department_id, salary_date). Окно добавит среднее, не сворачивая исходные строки.
Предположим, каждая строка salaries описывает сотрудника на указанную дату:
SELECT employee_name, salary_date, salary,
AVG(salary) OVER (
PARTITION BY department_id, salary_date
) AS department_average
FROM salaries;
В отличие от GROUP BY, оконная функция сохраняет детализацию. AVG игнорирует NULL. Если таблица хранит только события изменения зарплаты, сначала нужно восстановить действующие значения всех сотрудников на дату: простое окно по дате изменения не даст среднее по отделу.