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 │
└──────────────────────┴────────┘

더 알아보기 (Learn more)