集計関数¶
集計関数は、行全体の値を操作して、合計、平均、カウント、最小/最大値、標準偏差、推定などの数学的計算、および非数学的な演算を実行します。
集計関数は、入力として複数の行(実際には、0、1、またはそれ以上の行)を取り、単一の出力を生成します。対照的に、スカラー関数は入力として1つの行を取り、出力として1つの行(1つの値)を生成します。
集約関数は、 入力にゼロ行が含まれている場合でも、常に正確に1行を返します通常、入力にゼロ行が含まれている場合、出力は NULLです。ただし、ゼロ行を渡すと、集計関数は、0、空の文字列、またはその他の値を返す可能性があります。
このトピックの内容:
関数のリスト(サブカテゴリ別)¶
関数名 |
メモ |
---|---|
一般的な集計 |
|
他の集計関数とは異なる構文を使用します。 |
|
他の集計関数とは異なる構文を使用します。 |
|
STDDEV と STDDEV_SAMP はエイリアスです。 |
|
VAR_POP のエイリアス。 |
|
VAR_SAMP のエイリアス。 |
|
ビット単位の集計 |
|
ブール集計 |
|
ハッシュ |
|
半構造化データの集計 |
|
線形回帰 |
|
統計と確率 |
|
異なる値のカウント |
|
カーディナリティの推定 . ( HyperLogLog を 使用) |
|
HLL のエイリアス。 |
|
集約関数ではなく、 HLL_ACCUMULATE または HLL_COMBINE からのスカラー入力を使用します。 |
|
類似度の推定 . ( MinHash を 使用) |
|
APPROXIMATE_SIMILARITY のエイリアス。 |
|
頻度推定 . ( 省スペース を 使用) |
|
集約関数ではなく、 APPROX_TOP_K_ACCUMULATE または APPROX_TOP_K_COMBINE からのスカラー入力を使用します。 |
|
パーセンタイル推定 . ( t-Digest を 使用) |
|
集約関数ではなく、 APPROX_PERCENTILE_ACCUMULATE または APPROX_PERCENTILE_COMBINE からのスカラー入力を使用します。 |
|
集計ユーティリティ |
|
集計関数ではなく、集計関数と組み合わせて使用して 、 GROUP BY クエリによって生成された行の集計レベルを決定できます。 |
|
GROUPING のエイリアス。 |
使用例¶
次の例は、集計関数(AVG)とスカラー関数(COS)の違いを示しています。スカラー関数は入力行ごとに1つの出力行を返しますが、集計関数は複数の入力行に対して1つの出力行を返します。
テーブルには次のデータが含まれます。
SELECT x, y FROM simple ORDER BY x,y; +----+----+ | X | Y | |----+----| | 10 | 20 | | 20 | 44 | | 30 | 70 | +----+----+スカラー関数は、入力行ごとに1つの出力行を返します。
SELECT COS(x) FROM simple ORDER BY x; +---------------+ | COS(X) | |---------------| | -0.8390715291 | | 0.4080820618 | | 0.1542514499 | +---------------+集計関数は、複数の入力行に対して1つの出力行を返します。
SELECT SUM(x) FROM simple; +--------+ | SUM(X) | |--------| | 60 | +--------+
集計関数と NULL 値¶
一部の集約関数は NULL 値を無視します。たとえば、 AVG は、次の式に基づいて、値 1
、 5
、 NULL
の平均を 3
として計算します。
(1 + 5) / 2 = 3
分子と分母の両方で、2つの非NULL値のみが使用されます。
集計関数に渡されるすべての値が NULL の場合、集計関数は NULLを返します。
一部の集計関数には、複数の列を渡すことができます。例:
SELECT COUNT(col1, col2) FROM table1;
これらのインスタンスでは、個々の列が NULLの場合、集計関数は行を無視します。
たとえば、次のクエリでは、 COUNT は 4
ではなく 1
を返します。これは、選択した列に4行のうち3行に少なくとも1つの NULL 値が含まれているためです。
テーブルを作成し、値を入力します。
CREATE TABLE t (x INT, y INT); INSERT INTO t (x, y) VALUES (1, 2), -- No NULLs. (3, NULL), -- One but not all columns are NULL. (NULL, 6), -- One but not all columns are NULL. (NULL, NULL); -- All columns are NULL.テーブルをクエリします。
SELECT COUNT(x, y) FROM t; +-------------+ | COUNT(X, Y) | |-------------| | 1 | +-------------+
同様に、2つ以上の列を参照する式で SUM が呼び出され、それらの列の1つ以上が NULLである場合、式は NULLに評価され、行は無視されます。
SELECT SUM(x + y) FROM t; +------------+ | SUM(X + Y) | |------------| | 3 | +------------+
この動作は、一部の列が NULLである場合に行を破棄しない GROUP BY の動作とは異なります。
SELECT x AS X_COL, y AS Y_COL FROM t GROUP BY x, y; +-------+-------+ | X_COL | Y_COL | |-------+-------| | 1 | 2 | | 3 | NULL | | NULL | 6 | | NULL | NULL | +-------+-------+