TGViewer
This is Data This is Data @thisisdata · 6.21K subscribers
Post #308 2.85K
Учимся создавать «окна» в SQL

В прошлом посте мы узнали, зачем нужны оконные функции. Теперь научимся их объявлять. Все начинается с инструкции OVER() - она и определяет наше «окно».

Ключевые команды внутри OVER():

▪️PARTITION BY - разделяет данные на группы (партиции). Как GROUP BY, но без «схлопывания» строк. Считает функцию внутри каждой группы отдельно.
▪️ORDER BY - сортирует строки внутри окна. Критично для функций нарастающего итога, ранжирования и смещения (LAG/LEAD).

Разберем на примере простой таблички, содержащей дату, канал с которого пришел пользователь и количество конверсий:
SELECT 
date AS dt
, medium AS med
, conversions AS conv
, SUM(conversions) OVER(PARTITION BY date ORDER BY medium) AS sum
FROM orders


Что произойдет?

▪PARTITION BY Date создаст отдельное «окно» для каждой даты. Сумма будет считаться только в рамках одного дня.
▪ORDER BY medium отсортирует каналы внутри каждой даты.
▪SUM(conversions) в паре с ORDER BY рассчитает нарастающий итог конверсий внутри каждого дня. Для первой строки в окне (дне) sum будет равен ее conversions, для второй - сумме первой и второй, и так далее.

⚠️ Важно: ROWS / RANGE управляют диапазоном строк, по которым считается оконная функция. И даже если ничего не указывать, то по умолчанию используется RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

В результате выполнения запроса мы получим примерно такую табличку:
dt        med      conv  sum
10.05.20 cpa 1 1
10.05.20 cpc 2 3
10.05.20 organic 1 4
11.05.20 cpa 1 1
11.05.20 cpc 3 4
11.05.20 direct 1 5
11.05.20 organic 2 7
12.05.20 cpc 1 1
12.05.20 organic 2 3


Основы разобрали! Далее я расскажу как сужать фокус окна до «скользящего» диапазона с помощью ROWS BETWEEN.

#харды #sql
  • ❤ 22
  • 👍 15
  • 🤔 1
  • 💯 1
More from @thisisdata
  1. Sep 8, 2026Продукты 24 12 сентября в Москве Т-Банк собирает конференцию Продукты 24 x ffdd2d в компле…
  2. Sep 1, 2026День знаний, или Я все еще студент Лето опять пролетело подозрительно быстро. Я не успел н…
  3. Aug 25, 2026Обновил телеграм-курс по метрикам Уже несколько лет я разбираю метрики в канале: фреймворк…
  4. Aug 17, 2026AI в работе. Что изменилось? Почти два года назад я написал пост «Когда тебя заменит робот…
  5. Aug 7, 2026На русском языке о стратегии построения аналитической команды нет почти ничего. Буквально…
  6. Jul 15, 2026Как написать стратегию аналитики и зачем она нужна? Ура, я наконец-то закончил эту статью!…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →