集計関数¶
集計関数は、行全体の値を操作して、合計、平均、カウント、最小/最大値、標準偏差、推定などの数学的計算、および非数学的な演算を実行します。
集計関数は、入力として複数の行(実際には、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つの出力行を返します。
テーブルを作成し、値を入力します。
CREATE TABLE simple (x INTEGER, y INTEGER);
INSERT INTO simple (x, y) VALUES
(10, 20),
(20, 44),
(30, 70);
テーブルをクエリします。
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 OR REPLACE TABLE test_null_aggregate_functions (x INT, y INT);
INSERT INTO test_null_aggregate_functions (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 test_null_aggregate_functions;
+-------------+
| COUNT(X, Y) |
|-------------|
| 1 |
+-------------+
同様に、2つ以上の列を参照する式で SUM が呼び出され、それらの列の1つ以上が NULL である場合、式は NULL に評価され、行は無視されます。
SELECT SUM(x + y) FROM test_null_aggregate_functions;
+------------+
| SUM(X + Y) |
|------------|
| 3 |
+------------+
この動作は、一部の列が NULL である場合に行を破棄しない GROUP BY の動作とは異なります。
SELECT x AS X_COL, y AS Y_COL
FROM test_null_aggregate_functions
GROUP BY x, y;
+-------+-------+
| X_COL | Y_COL |
|-------+-------|
| 1 | 2 |
| 3 | NULL |
| NULL | 6 |
| NULL | NULL |
+-------+-------+