Как решить задачу с ненарастающим расчётом, например по зарплатам или филиалам, и когда использовать оконную функцию вместо группировки?

Если нужен отдельный итог на каждый филиал, используйте GROUP BY. Если нужно сохранить строки сотрудников и добавить итог филиала рядом, используйте оконную сумму без ORDER BY.

Короткий ответ

Что ответить на собеседовании

Если нужен отдельный итог на каждый филиал, используйте GROUP BY. Если нужно сохранить строки сотрудников и добавить итог филиала рядом, используйте оконную сумму без ORDER BY.

Подробный разбор

Ответ с пояснениями

Если нужен отдельный итог на каждый филиал, используйте GROUP BY. Если нужно сохранить строки сотрудников и добавить итог филиала рядом, используйте оконную сумму без ORDER BY.

SELECT branch_id, employee_id, salary,
       SUM(salary) OVER (PARTITION BY branch_id) AS branch_total
FROM employees;

Такой итог не нарастает: он одинаков для всех сотрудников одного филиала. GROUP BY branch_id вернул бы одну строку на филиал. Для накопительного итога добавляют порядок и явную рамку ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Термин «ненарастающий» неоднозначен, поэтому сначала уточните требуемую детализацию результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее