Middle+
46
questionbank

Что такое оконные функции?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Оконная функция вычисляет значение для каждой строки, основываясь на "окне" или наборе строк, связанных с текущей строкой. Это похоже на агрегирующие функции (SUM, AVG, COUNT), но они не группируют результат в одну строку для каждой группы, а предоставляют агрегированное значение для каждой отдельной строки из исходного набора данных.

Основные компоненты:

  1. Функция: Сама оконная функция (например, ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD(), SUM(), AVG()).
  2. OVER(): Определяет, что это оконная функция.
  3. PARTITION BY (опционально): Делит строки на разделы, к которым применяется оконная функция независимо.
  4. ORDER BY (обязательно в большинстве случаев): Определяет порядок строк внутри каждого раздела, важный для таких функций, как ROW_NUMBER, LAG, LEAD.
  5. ROWS или RANGE (опционально): Определяет фрейм окна - подмножество строк внутри раздела, к которому применяется функция. По умолчанию часто используется весь раздел.

Часто используемые оконные функции:

  • ROW_NUMBER(): Присваивает уникальный последовательный номер каждой строке в разделе.
  • RANK(): Присваивает ранг строкам в разделе. Строки с одинаковыми значениями получают одинаковый ранг, следующему рангу пропускается столько номеров, сколько было повторяющихся значений.
  • DENSE_RANK(): Похож на RANK(), но не пропускает номера рангов.
  • LAG(column, offset, default): Получает значение из строки, предшествующей текущей на заданное смещение.
  • LEAD(column, offset, default): Получает значение из строки, следующей за текущей на заданное смещение.
  • Агрегирующие функции (SUM, AVG, COUNT, MIN, MAX) могут использоваться как оконные для получения скользящих или кумулятивных агрегатов.

Пример использования:

sql