TGViewer
LEFT JOIN LEFT JOIN @leftjoin · 41.8K subscribers
Post #760 11.5K
Оконные и аналитические функции в SQL: Начало
Врываемся с серией постов про оконные функции в SQL. Оконные функции — это классная опция в некоторых движках баз данных, которая с легкостью помогает решать ряд аналитических задач без написания сложных SQL-конструкций.

Разберемся подробнее
Когда мы пишем запрос для получения агрегатов, то строки обрабатываются «единым куском», для которого вычисляется агрегат.
А при использовании оконных функций, запрос делится на “окна” и уже для каждой из отдельных частей считаются нужные агрегаты. ​​Важно помнить: движок посчитает в рамках окна только те агрегаты, которые используют оконное выражение, а не все подряд в запросе.
Окно определяется с помощью обязательной инструкции OVER():

SELECT функция (столбец для вычислений)
OVER (
[PARTITION BY столбец для формирования окна]
[ORDER BY столбец для сортировки]
[ROWS или RANGE выражение для ограничения строк в пределах группы]
)

Для лучшего понимания работы оконных функций стоит вспомнить о порядке выполнения запроса: так как оконные функции выполняются в блоке SELECT, то все вычисления в них происходят после возможной фильтрации и/или группировки. То есть, если в таблице с домашними животными указать WHERE animal = ‘cat’, то оконные функции будут оперировать только котиками, а попугаи и пёсики в их расчёты не попадут.

Интересная особенность
Можно не использовать опциональные конструкции и получить аналогичный обыкновенной агрегации результат.
Сравните:

SELECT SUM(amount) OVER() AS total_amount
FROM A


VS

SELECT SUM(amount) AS total_amount
FROM A


Оба запроса выдадут один и тот же результат. Но в первом случае мы можем дополнительно сразу выбрать другие поля, не участвующие в агрегации, в то время как второй вариант (классическая агрегация) такого не допускает.

Итак, в квадратных скобках обозначены необязательные параметры. Однако, вся суть в том, чтобы указать их для получения иного, разбитого по “окнам” результата.

Поговорим про них отдельно?
#leftjoin_sql
  • 👍 121
  • ❤ 6
  • ⚡ 3
More from @leftjoin
  1. Oct 14, 2026Claude помог обнаружить новую планету Наверное. Пользователь reddit проанализировал данные…
  2. Oct 12, 20264 уровня ИИ-осведомленности Еще в апреле Андрей Карпаты (автор термина «вайбкодинг», если…
  3. Oct 9, 2026Anthropic представила Claude Dashboards и Claude Motion И вот опять ИИ отбирает работу у а…
  4. Oct 7, 2026Состоялся релиз Polars 2.0 Polars — Python-библиотека для работы с данными и популярная ал…
  5. Oct 5, 2026Physical AI: следующий этап развития ИИ Рано или поздно ИИ выйдет за пределы интернета в р…
  6. Sep 30, 2026Что было на OpenAI Dev Day? Вообще-то много чего — больше 20 релизов и анонсов. Пройдемся…
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 →