它是 any 的别名,但为兼容窗口函数而引入;在窗口函数中,有时需要处理 NULL 值 (默认情况下,所有 ClickHouse 聚合函数都会忽略 NULL 值) 。
它支持声明一个保留 null 值的修饰符 (RESPECT NULLS) ,既可用于窗口函数,也可用于普通聚合。
与 any 一样,在不使用窗口函数时,如果输入流未排序,则结果将是随机的,并且返回类型与输入类型一致 (仅当输入为 Nullable 或添加了 -OrNull 组合器时,才会返回 NULL) 。
示例
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 │
└──────────────────────┴────────┘