9.22. Оконные функции#
9.22. Оконные функции #
Оконные функции предоставляют возможность выполнять вычисления по наборам строк, связанных с текущей строкой запроса. См. Раздел 3.5 для введения в эту функцию и Раздел 4.2.8 для получения более подробной информации синтаксиса.
Встроенные оконные функции перечислены в Таблица 9.64. Обратите внимание, что эти функции должны вызываться с использованием синтаксиса оконных функций, то есть требуется указание предложения OVER
.
В дополнение к этим функциям, любая встроенная или определенная пользователем обычная агрегатная функция (то есть без упорядоченного набора и не гипотетизирующая агрегатная функция) может быть использована в качестве оконной функции; см. Раздел 9.21 для списка встроенных агрегатных функций. Агрегатные функции действуют как оконные функции только при наличии предложения OVER
после вызова; в противном случае они действуют как обычные агрегаты и возвращают одну строку для всего набора.
Таблица 9.64. Оконные функции общего назначения
Все функции, перечисленные в Таблица 9.64, зависят от порядка сортировки, указанного в предложении ORDER BY
соответствующего оконного определения. Строки, которые не являются уникальными при рассмотрении только столбцов ORDER BY
, называются пирами. Четыре функции ранжирования (включая cume_dist
) определены таким образом, чтобы они давали одинаковый ответ для всех строк группы пиров.
Обратите внимание, что функции first_value
, last_value
и nth_value
учитывают только строки внутри “window frame”, который по умолчанию содержит строки от начала секции до последнего ряда текущей строки. Это может дать неинформативные результаты для функции last_value
и иногда также для функции nth_value
. Вы можете переопределить frame, добавив подходящую спецификацию frame (RANGE
, ROWS
или GROUPS
) к выражению OVER
. См. Раздел 4.2.8 для получения дополнительной информации о спецификациях frame.
Когда агрегатная функция используется в качестве оконной функции, она агрегирует
по строкам в пределах текущей оконной рамки строки.
Агрегат, используемый с ORDER BY
и стандартным определением окна
производит тип поведения “накопительной суммы”, которое может быть или
не быть желаемым. Чтобы получить
агрегацию по всей секции, опустите ORDER BY
или используйте
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
.
Другие спецификации окна могут использоваться для получения других эффектов.
Примечание
Стандарт SQL определяет опцию RESPECT NULLS
или IGNORE NULLS
для функций lead
, lag
, first_value
, last_value
и nth_value
. В Tantor SE-1C эта опция не реализована: поведение всегда соответствует стандартному значению по умолчанию, а именно RESPECT NULLS
. Аналогично, опция FROM FIRST
или FROM LAST
для функции nth_value
также не реализована: поддерживается только поведение по умолчанию FROM FIRST
. (Вы можете получить результат FROM LAST
, поменяв порядок сортировки ORDER BY
).