Оконные функции обеспечивают возможность выполнения вычислений по наборам строк, связанных с текущей строкой запроса. См. Раздел 1.3.5 для ознакомления с данной функциональностью, а также Раздел 2.1.2.8 для получения подробных сведений о синтаксисе.
Встроенные оконные функции приведены в
Таблица 2.6.65. Обратите внимание, что данные функции
должны вызываться с использованием синтаксиса оконных функций, то есть
OVER необходимо наличие предложения.
Помимо перечисленных функций, в качестве оконной функции может использоваться любая встроенная или пользовательская обычная агрегатная функция (т. е. не являющаяся агрегатной функцией на упорядоченном или гипотетическом наборе); см.
Раздел 2.6.21 для получения списка встроенных агрегатных функций.
Агрегатные функции выполняются как оконные только в том случае, если за вызовом следует OVER
предложение; в противном случае они работают как обычные агрегатные функции
и возвращают одну строку для всего набора данных.
Таблица 2.6.65. Оконные функции общего назначения
Все функции, перечисленные в
Таблица 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
порядка сортировки.)