Обычная агрегация сворачивает строки в группы, а оконная функция сохраняет строки и добавляет вычисление по связанному набору, заданному OVER.
Объясните, как работают оконные функции в SQL и сравните их с обычными агрегатными функциями по тому, как они обрабатывают строки и формируют результаты запросов. Также опишите, когда каждая из них уместна в реальных сценариях запросов, включая любые последствия для чтения, фильтрации или представления данных, возвращаемых в код приложения.
Обычная агрегация сворачивает строки в группы, а оконная функция сохраняет строки и добавляет вычисление по связанному набору, заданному OVER.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Обычная агрегация сворачивает строки в группы, а оконная функция сохраняет строки и добавляет вычисление по связанному набору, заданному OVER.
SUM(amount) с GROUP BY customer_id возвращает итог на клиента; SUM(amount) OVER (PARTITION BY customer_id) повторяет этот итог рядом с каждой покупкой. ROW_NUMBER полезен для ранжирования, LAG — для сравнения с предыдущей строкой. Для фильтра по вычисленному номеру в PostgreSQL используют внешний запрос или CTE. ORDER BY внутри окна не гарантирует порядок итогового ответа: для отображения задайте внешний ORDER BY. Рамка окна особенно важна для накопительных сумм.