×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.6.22. Оконные функции

Оконные функции обеспечивают возможность выполнения вычислений по наборам строк, связанных с текущей строкой запроса. См. Раздел 1.3.5 для ознакомления с данной функциональностью, а также Раздел 2.1.2.8 для получения подробных сведений о синтаксисе.

Встроенные оконные функции приведены в Таблица 2.6.65. Обратите внимание, что данные функции должны вызываться с использованием синтаксиса оконных функций, то есть OVER необходимо наличие предложения.

Помимо перечисленных функций, в качестве оконной функции может использоваться любая встроенная или пользовательская обычная агрегатная функция (т. е. не являющаяся агрегатной функцией на упорядоченном или гипотетическом наборе); см. Раздел 2.6.21 для получения списка встроенных агрегатных функций. Агрегатные функции выполняются как оконные только в том случае, если за вызовом следует OVER предложение; в противном случае они работают как обычные агрегатные функции и возвращают одну строку для всего набора данных.

Таблица 2.6.65. Оконные функции общего назначения

Функция

Описание

row_number () → bigint

Данная функция возвращает номер текущей строки в пределах ее раздела, начиная с 1.

rank () → bigint

Данная функция возвращает ранг текущей строки с пропусками; иными словами, с row_number первой строки в ее группе сверстников.

dense_rank () → bigint

Данная функция возвращает ранг текущей строки без пропусков; эта функция фактически подсчитывает количество групп равных строк.

percent_rank () → double precision

Данная функция возвращает относительный ранг текущей строки, рассчитываемый как (rank - 1) / (общее количество строк в разделе - 1). Таким образом, полученное значение лежит в диапазоне от 0 до 1 включительно.

cume_dist () → double precision

Данная функция возвращает кумулятивное распределение, рассчитываемое как (количество строк в разделе, предшествующих текущей строке или равных ей по рангу) / (общее количество строк в разделе). Таким образом, значение находится в диапазоне от 1/N в 1.

ntile ( num_buckets integer ) → integer

Возвращает целое число в диапазоне от 1 до значения аргумента, разделяя раздел максимально равномерно.

lag ( значение anycompatible [, offset integer [, default anycompatible ]] ) → anycompatible

Возвращает значение значение вычисляемое для строки, которая находится на расстоянии offset строк перед текущей строкой в пределах раздела; если такая строка отсутствует, то вместо неё возвращается default (тип которого должен быть совместим с типом значение). Оба аргумента offset и default вычисляются относительно текущей строки. Если они опущены, offset по умолчанию принимает значение 1, а default до NULL.

lead ( значение anycompatible [, offset integer [, default anycompatible ]] ) → anycompatible

Возвращает значение значение вычисляемое для строки, которая находится на расстоянии offset строк после текущей строки в пределах раздела; если такая строка отсутствует, то вместо неё возвращается default (тип которого должен быть совместим с типом значение). Оба аргумента offset и default вычисляются относительно текущей строки. Если они опущены, offset по умолчанию принимает значение 1, а default до NULL.

first_value ( значение anyelement ) → anyelement

Возвращает значение значение вычисляется в строке, являющейся первой строкой рамки окна.

last_value ( значение anyelement ) → anyelement

Возвращает значение значение вычисляется в строке, являющейся последней строкой рамки окна.

nth_value ( значение anyelement, n integer ) → anyelement

Возвращает значение значение вычисляется в строке, которая является n'th строкой рамки окна (начиная с 1); возвращает NULL если такая строка отсутствует.


Все функции, перечисленные в Таблица 2.6.65 зависят от порядка сортировки, заданного в ORDER BY предложение соответствующего определения окна. Строки, которые не являются различимыми при рассмотрении только ORDER BY столбцов, называются peers. Четыре функции ранжирования (включая cume_dist) определены так, что они возвращают одинаковый результат для всех строк в группе собратьев.

Обратите внимание, что first_value, last_value, и nth_value рассматривают только строки в пределах «window frame», которая по умолчанию содержит строки от начала раздела до последней строки-соседа (peer) текущей строки. Вероятно, это приведет к получению малополезных результатов для last_value и иногда также nth_value. Вы можете переопределить рамку окна, добавив подходящую спецификацию рамки (RANGE, ROWS или GROUPS) к OVER предложение. См. Раздел 2.1.2.8 для получения дополнительных сведений о спецификациях рамок.

Когда агрегатная функция используется в качестве оконной функции, она выполняет агрегацию по строкам внутри рамки окна текущей строки. Агрегатная функция, используемая с ORDER BY а определение оконного фрейма по умолчанию формирует «нарастающую сумму» (running sum), что может как соответствовать, так и не соответствовать требуемому поведению. Чтобы получить агрегацию по всему разделу, опустите ORDER BY или используйте ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. Для достижения иных эффектов могут быть использованы другие спецификации рамки.

Примечание

В стандарте SQL определен RESPECT NULLS или IGNORE NULLS параметр для lead, lag, first_value, last_value, и nth_value. Это не реализовано в Digital Q.DataBase: поведение всегда идентично поведению по умолчанию в стандарте, а именно RESPECT NULLS. Аналогичным образом, предусмотренный стандартом FROM FIRST или FROM LAST параметр для nth_value не реализован: поддерживается только FROM FIRST стандартное поведение. (Получить результат выполнения FROM LAST можно путем изменения ORDER BY порядка сортировки.)

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению