Полный гайд по оконным функциям
В инете очень много шпаргалок, задач, но когда я учился только не было понимания с чего начать и как все это работает с нормальными картинками и объяснениями.
Решил выпустить очередной гайд, в котором описано практически все, что можно узнать про оконные функции: оптимизация, сортировка, партиции, RANGE, ROWS и так далее.
Кстати, интересный вопрос: Что отработает в примерах ниже быстрее? Оконка или JOIN? В каких условиях один вариант начнет сильно проигрывать другому?
🐸 Пример с оконкой SELECT user_id, date, revenue, revenue / SUM(revenue) OVER (PARTITION BY date) AS share FROM orders
🐸 Пример с агрегацией WITH daily AS ( SELECT date, SUM(revenue) AS total_rev FROM orders GROUP BY date ) SELECT o.user_id, o.date, o.revenue, o.revenue / d.total_rev AS share FROM orders o JOIN daily d USING (date)
🔗 Ссылочку дублирую еще и тут на гайд: ССЫЛКА 🔥 Свой ответ пишите в комментариях, будет интересно почитать ваши мысли! Поставьте реакции, если хотите разбор ответа.
@zasql_python
· 22.04
Оконка выиграет когда агрегатов несколько - за один проход по таблице считает все. С JOIN-CTE postgresql может материализовать CTE (до 12-й версии особенно), и тогда получается лишний scan.
Если один агрегат - разница обычно незаметна, оптимизатор справляется. Я на практике оконки ставлю когда нужно 2+ метрики одновременно, с одним агрегатом уже ситуативно.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён