😳 Window Functions — тот момент, когда SQL перестает быть просто SELECT'ами

Почти каждый аналитик сталкивается с задачами вроде:

— выбрать последний заказ каждого клиента — сравнить продажи с предыдущим месяцем — найти топ-3 товара в каждой категории — посчитать накопительную выручку — удалить дубликаты, оставив только актуальную запись

Новички часто решают это через подзапросы, десятки JOIN или вообще выгружают данные в Python

👁 Хотя в SQL для этого есть оконные функции

Главное, что нужно понять:

GROUP BY объединяет строки в одну WINDOW FUNCTIONS оставляют все строки на месте, но позволяют выполнять вычисления относительно других строк

🤓 Именно поэтому они стали стандартом в аналитике

Функции, которые стоит знать в первую очередь: ROW_NUMBER() — нумерация строк внутри группы. Идеально для дедупликации и поиска последней записи

RANK() / DENSE_RANK() — построение рейтингов. Разница только в том, как обрабатываются одинаковые значения

LAG() / LEAD() — доступ к предыдущей и следующей строке без JOIN Используются буквально везде: MoM/YoY, поиск разрывов между событиями, анализ пользовательского поведения, retention

SUM() OVER(), AVG() OVER(), COUNT() OVER() — накопительные суммы, скользящие средние, проценты от общего объема и другие аналитические метрики

В большинстве случаев всё сводится к одной конструкции:

OVER ( PARTITION BY ... ORDER BY ... )

PARTITION BY отвечает на вопрос: внутри каких групп считаем?

ORDER BY — в каком порядке считаем? Не зря на собеседованиях аналитиков задачи на ROW_NUMBER() и LAG() встречаются практически так же часто, как вопросы на JOIN. А в рабочих SQL-запросах без оконных функций уже сложно представить нормальный анализ данных А какая оконная функция у вас используется чаще всего? 👇

😳 Window Functions — тот момент, когда SQL перестает быть просто SELECT'ами
Почти каждый аналитик сталкивается с задачами вроде:
— выбрать последний заказ каждого клиента
— сравнить продажи с предыдущ... | Сетка — социальная сеть от hh.ru 😳 Window Functions — тот момент, когда SQL перестает быть просто SELECT'ами
Почти каждый аналитик сталкивается с задачами вроде:
— выбрать последний заказ каждого клиента
— сравнить продажи с предыдущ... | Сетка — социальная сеть от hh.ru