メインコンテンツまでスキップ
メインコンテンツまでスキップ

first_value

これはanyの別名ですが、ウィンドウ関数との互換性のために導入されました。ここでは、時にはNULL値を処理する必要があります(デフォルトでは、すべてのClickHouseの集約関数はNULL値を無視します)。

RESPECT NULLS修飾子を宣言してNULLを尊重することができ、これはウィンドウ関数および通常の集約の両方で動作します。

anyと同様に、ウィンドウ関数がない場合、ソースストリームが順序付けられていない場合、結果はランダムになります。また、返り値の型が入力の型と一致する場合(入力がNullableの場合のみNullが返され、-OrNullコンビネータが追加されます)。

examples

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);

example1

デフォルトでは、NULL値は無視されます。

select first_value(b) from test_data;
┌─any(b)─┐
│      3 │
└────────┘

example2

NULL値は無視されます。

select first_value(b) ignore nulls from test_data
┌─any(b) IGNORE NULLS ─┐
│                    3 │
└──────────────────────┘

example3

NULL値が受け入れられます。

select first_value(b) respect nulls from test_data
┌─any(b) RESPECT NULLS ─┐
│                  ᴺᵁᴸᴸ │
└───────────────────────┘

example4

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