集計関数

集計関数は、行全体の値を操作して、合計、平均、カウント、最小/最大値、標準偏差、推定などの数学的計算、および非数学的な演算を実行します。

集計関数は、入力として複数の行(実際には、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 |
+----+----+
Copy

スカラー関数は、入力行ごとに1つの出力行を返します。

SELECT COS(x)
    FROM simple
    ORDER BY x;
+---------------+
|        COS(X) |
|---------------|
| -0.8390715291 |
|  0.4080820618 |
|  0.1542514499 |
+---------------+
Copy

集計関数は、複数の入力行に対して1つの出力行を返します。

SELECT SUM(x)
    FROM simple;
+--------+
| SUM(X) |
|--------|
|     60 |
+--------+
Copy

集計関数と NULL 値

一部の集約関数は NULL 値を無視します。たとえば、 AVG は、次の式に基づいて、値 15NULL の平均を 3 として計算します。

(1 + 5) / 2 = 3

分子と分母の両方で、2つの非NULL値のみが使用されます。

集計関数に渡されるすべての値が NULL の場合、集計関数は NULLを返します。

一部の集計関数には、複数の列を渡すことができます。例:

SELECT COUNT(col1, col2) FROM table1;
Copy

これらのインスタンスでは、個々の列が NULLの場合、集計関数は行を無視します。

たとえば、次のクエリでは、 COUNT4 ではなく 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.
Copy

テーブルをクエリします。

SELECT COUNT(x, y) FROM t;
+-------------+
| COUNT(X, Y) |
|-------------|
|           1 |
+-------------+
Copy

同様に、2つ以上の列を参照する式で SUM が呼び出され、それらの列の1つ以上が NULLである場合、式は NULLに評価され、行は無視されます。

SELECT SUM(x + y) FROM t;
+------------+
| SUM(X + Y) |
|------------|
|          3 |
+------------+
Copy

この動作は、一部の列が 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 |
+-------+-------+
Copy