Когда нужно посчитать агрегаты по группе и при этом сохранить исходные строки, многие делают подзапрос с
GROUP BY и потом джойнят его обратно:SUM(o.total) OVER (PARTITION BY o.user_id)
Оконная функция считает агрегат по группе, но не схлопывает строки, поэтому не нужен ни
GROUP BY, ни повторное соединение:AVG(o.total) OVER (PARTITION BY o.user_id)
Можно получить любые метрики по той же группе в одном проходе по данным:
COUNT(*) OVER (PARTITION BY o.user_id)
Особенно полезно для аналитики, отчётов, флагов “у пользователя больше N заказов” и подобных задач без лишних подзапросов.
🔥 Один из самых эффективных способов упростить сложные запросы.
➡️ SQL Ready | #совет
