first_value
first_value
any의 별칭(alias)으로, 윈도우 함수와의 호환성을 위해 도입된 집계 함수예요. 기본적으로 ClickHouse의 모든 집계 함수가 NULL 값을 무시하는 반면, first_value는 필요할 때 NULL 값을 처리하도록 지정할 수 있습니다.
출처: 문서
본문
이 함수는 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 │
└──────────────────────┴────────┘