MODE¶
expr1
内の値の中で最も頻度の高い値を返します。NULL 値は無視されます。すべての値が NULLの場合、または0行がある場合、関数は NULLを返します。
構文¶
集計関数
MODE( <expr1> )
ウィンドウ関数
MODE( <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
引数¶
expr1
この式は、最も頻度の高い値を見つけるために検索される値を生成します。式は、次のデータ型のいずれかになります。
BINARY
BOOLEAN
DATE
FLOAT
INTEGER
NUMBER
TIMESTAMP (TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ)
VARCHAR
VARIANT
この関数は、次のデータ型をサポートしていません。
ARRAY
GEOGRAPHY
OBJECT
expr2
データをグループに分割するオプションの式です。出力には、各グループ/パーティションの最も頻度の高い値が含まれます。
戻り値¶
返される値のデータ型は、入力式のデータ型と同じです。
使用上の注意¶
最も頻度の高い値が同じ値である場合(2つ以上の値が互いに同じ頻度で、他の値よりも頻繁に発生する場合)、 MODE はそれらの値の1つを返します。
DISTINCT はこの関数ではサポートされていません。
NULL が最も頻繁な値であっても、関数は NULL を返しません(すべての値が NULLである場合を除く)。
ウィンドウ関数として使用する場合:
この関数は次をサポートしていません。
OVER()句のORDER BY サブ句。最も頻度が高い値を選択する場合、値の順序は重要ではありません。
ウィンドウフレーム。
例¶
次のコードは、 MODE
の使用方法を示しています。
テーブルとデータを作成します。
create or replace table aggr(k int, v decimal(10,2));列vの
MODE
値を取得します。行がないため、関数は NULL を返します。select mode(v) from aggr; +---------+ | MODE(V) | |---------| | NULL | +---------+いくつかの行を挿入します。
INSERT INTO aggr (k, v) VALUES (1, 10), (1, 10), (1, 10), (1, 10), (1, 20), (1, 21);
MODE
は、最も頻度の高い値10を返します。select mode(v) from aggr; +---------+ | MODE(V) | |---------| | 10.00 | +---------+さらにいくつかの行を挿入します。
INSERT INTO aggr (k, v) VALUES (2, 20), (2, 20), (2, 25), (2, 30);現在、最も頻繁に使用される値は2つあります。
MODE
は値10を選択します。select mode(v) from aggr; +---------+ | MODE(V) | |---------| | 10.00 | +---------+NULL 値の行を挿入します。
INSERT INTO aggr (k, v) VALUES (3, null);各グループの
MODE
値を取得します。グループk = 3の値には NULL の値しか含まれていないため、そのグループの戻り値は NULLであることに注意してください。select k, mode(v) from aggr group by k order by k; +---+---------+ | K | MODE(V) | |---+---------| | 1 | 10.00 | | 2 | 20.00 | | 3 | NULL | +---+---------+
MODE
は、 OVER()句を使用して基本的なウィンドウ関数として使用することもできます。select k, v, mode(v) over (partition by k) from aggr order by k, v; +---+-------+-------------------------------+ | K | V | MODE(V) OVER (PARTITION BY K) | |---+-------+-------------------------------| | 1 | 10.00 | 10.00 | | 1 | 10.00 | 10.00 | | 1 | 10.00 | 10.00 | | 1 | 10.00 | 10.00 | | 1 | 20.00 | 10.00 | | 1 | 21.00 | 10.00 | | 2 | 20.00 | 20.00 | | 2 | 20.00 | 20.00 | | 2 | 25.00 | 20.00 | | 2 | 30.00 | 20.00 | | 3 | NULL | NULL | +---+-------+-------------------------------+