Ответ вслух Junior SQL дата-инженера обновлено

Оконные функции против GROUP BY

Вопрос

Объясните, чем оконные функции отличаются от GROUP BY, и приведите задачи, где без окон не обойтись.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «GROUP BY сворачивает группу в одну строку, а оконная функция считает значение по группе строк, но оставляет каждую строку на месте. Окно задаётся PARTITION BY для групп, ORDER BY для порядка и рамкой для того, какие строки участвуют.

Что должно прозвучать в ответе

  • GROUP BY схлопывает строки, окно сохраняет каждую строку

  • PARTITION BY, ORDER BY и рамка

  • Ранжирование: топ-N в группе, дедупликация

  • Смещения: LAG и LEAD для разницы с прошлым значением

  • Нарастающие итоги и скользящие средние

  • Рамка по умолчанию при ORDER BY

Что могут спросить следом

  • Можно ли использовать оконную функцию в WHERE?
  • Как получить топ-3 товара в каждой категории?

Разбор

Образцовый ответ: «GROUP BY сворачивает группу в одну строку, а оконная функция считает значение по группе строк, но оставляет каждую строку на месте. Окно задаётся PARTITION BY для групп, ORDER BY для порядка и рамкой для того, какие строки участвуют. Без окон не обойтись в задачах: топ-N в каждой группе и дедупликация через ROW_NUMBER, разница с предыдущим значением через LAG, нарастающие итоги и скользящие средние, доля строки от суммы группы. Важная деталь: при ORDER BY без рамки получается нарастающий итог. И окна вычисляются после WHERE и GROUP BY, поэтому фильтровать по их результату нужно во внешнем запросе или CTE».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.