Встроенные оконные функции¶
Встроенные оконные функции могут использоваться только вместе с выражением
OVER
.
Синтаксис¶
Выражение¶
Диаграмма
Литерал¶
Диаграмма
LAST_VALUE¶
Функция last_value()
возвращает значение последнего выражения expression
в рамке окна для текущего кортежа. Рамка рассчитывается для каждого кортежа
так же, как и для агрегатных оконных функций.
Пример¶
CREATE TABLE t0(x INTEGER PRIMARY KEY, y TEXT);
INSERT INTO t0 VALUES (1, 'aaa'), (2, 'aaa'), (3, 'bbb');
SELECT x, y, last_value(x) OVER (ORDER BY y) FROM t0 ORDER BY x;
x | y | col_1
---+-----+-------
1 | aaa | 2
2 | aaa | 2
3 | bbb | 3
ROW_NUMBER¶
Функция row_number()
присваивает каждому кортежу номер в текущем разделе.
Нумерация начинается с 1 в порядке, определенном выражением ORDER BY
в определении окна, либо в произвольном порядке, если ORDER BY
отсутствует.
Пример¶
CREATE TABLE t0(x INTEGER PRIMARY KEY, y TEXT);
INSERT INTO t0 VALUES (1, 'aaa'), (2, 'ccc'), (3, 'bbb');
SELECT x, y, row_number() OVER (ORDER BY y) FROM t0 ORDER BY x;
x | y | col_1
---+-----+-------
1 | aaa | 1
2 | ccc | 3
3 | bbb | 2
Функция row_number()
присваивает каждому кортежу номер в порядке,
заданном выражением ORDER BY
внутри определения окна (в данном случае
ORDER BY y
). При этом, ORDER BY
внутри OVER
влияет только на нумерацию
кортежей, но не изменяет порядок итогового вывода, который определяется
ORDER BY
в операторе SELECT
(в данном случае ORDER BY x
).