Оконные функции
Вопрос
Что такое оконные функции, чем они отличаются от GROUP BY и для каких задач аналитика нужны?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Считают по группе строк, не схлопывая их
PARTITION BY задаёт группу, ORDER BY порядок внутри
ROW_NUMBER, RANK для последней записи и топ-N
LAG, LEAD для разницы между соседними событиями
Нарастающий итог и рамка окна
Что могут спросить следом
- Чем RANK отличается от DENSE_RANK?
- Почему оконную функцию нельзя использовать в WHERE?
Разбор
Оконная функция вычисляет значение по набору связанных строк и добавляет его к каждой строке, строки не схлопываются, в отличие от GROUP BY. PARTITION BY делит данные на группы, ORDER BY задаёт порядок внутри группы. ROW_NUMBER помогает взять последнюю запись по каждому объекту, например текущий статус заявки по истории. RANK и DENSE_RANK для топ-N с учётом равенства. LAG и LEAD считают время между событиями: сколько заявка ждала от одного статуса до следующего. SUM с ORDER BY даёт нарастающий итог. Окна вычисляются после WHERE и GROUP BY, поэтому фильтруют по ним во внешнем запросе.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.