Это псевдоним для any, но он был введён для совместимости с оконными функциями, где иногда требуется обрабатывать значения NULL (по умолчанию все агрегатные функции ClickHouse игнорируют значения NULL).
Поддерживается указание модификатора для учёта значений NULL (RESPECT NULLS) как в оконных функциях, так и в обычных агрегациях.
Как и в случае с any, без оконных функций результат будет случайным, если входной поток не упорядочен, а возвращаемый тип
совпадает с входным типом (NULL возвращается только в том случае, если входной тип — Nullable или добавлен комбинатор -OrNull).
Примеры
CREATE TABLE test_data
(
a Int64,
b Nullable(Int64)
)
ENGINE = Memory;
INSERT INTO test_data (a, b) VALUES (1,null), (2,3), (4, 5), (6,null);Пример 1
По умолчанию значение NULL игнорируется.
SELECT first_value(b) FROM test_data;┌─any(b)─┐
│ 3 │
└────────┘Пример 2
Значение NULL игнорируется.
SELECT first_value(b) ignore nulls FROM test_data┌─any(b) IGNORE NULLS ─┐
│ 3 │
└──────────────────────┘Пример 3
Допускается значение NULL.
SELECT first_value(b) respect nulls FROM test_data┌─any(b) RESPECT NULLS ─┐
│ ᴺᵁᴸᴸ │
└───────────────────────┘Пример 4
Стабильный результат при использовании подзапроса с ORDER BY.
SELECT
first_value_respect_nulls(b),
first_value(b)
FROM
(
SELECT *
FROM test_data
ORDER BY a ASC
)┌─any_respect_nulls(b)─┬─any(b)─┐
│ ᴺᵁᴸᴸ │ 3 │
└──────────────────────┴────────┘