BigQuery 向けの GoogleSQL は、次の一般的な集計関数をサポートしています。集計関数呼び出しの構文については、集計関数呼び出しをご覧ください。
ANY_VALUE
ANY_VALUE(
expression
[ HAVING { MAX | MIN } expression2 ]
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
グループから選択された行の expression
を返します。どの行が選択されるかは非決定的で、ランダムではありません。入力によって行が生成されない場合、NULL
を返します。グループ内のすべての行で expression
が NULL
の場合、NULL
を返します。
ANY_VALUE
は、あたかも RESPECT NULLS
が指定されているかのように動作します。expression
が NULL
である行が考慮され、そのような行が選択される場合があります。
HAVING
句が ANY_VALUE
関数に含まれている場合、OVER
句はこの関数で使用できません。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
サポートされる引数の型
すべて
返されるデータ型
入力データ型と一致します。
例
SELECT ANY_VALUE(fruit) as any_value
FROM UNNEST(["apple", "banana", "pear"]) as fruit;
+-----------+
| any_value |
+-----------+
| apple |
+-----------+
SELECT
fruit,
ANY_VALUE(fruit) OVER (ORDER BY LENGTH(fruit) ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS any_value
FROM UNNEST(["apple", "banana", "pear"]) as fruit;
+--------+-----------+
| fruit | any_value |
+--------+-----------+
| pear | pear |
| apple | pear |
| banana | apple |
+--------+-----------+
WITH
Store AS (
SELECT 20 AS sold, "apples" AS fruit
UNION ALL
SELECT 30 AS sold, "pears" AS fruit
UNION ALL
SELECT 30 AS sold, "bananas" AS fruit
UNION ALL
SELECT 10 AS sold, "oranges" AS fruit
)
SELECT ANY_VALUE(fruit HAVING MAX sold) AS a_highest_selling_fruit FROM Store;
+-------------------------+
| a_highest_selling_fruit |
+-------------------------+
| pears |
+-------------------------+
WITH
Store AS (
SELECT 20 AS sold, "apples" AS fruit
UNION ALL
SELECT 30 AS sold, "pears" AS fruit
UNION ALL
SELECT 30 AS sold, "bananas" AS fruit
UNION ALL
SELECT 10 AS sold, "oranges" AS fruit
)
SELECT ANY_VALUE(fruit HAVING MIN sold) AS a_lowest_selling_fruit FROM Store;
+-------------------------+
| a_lowest_selling_fruit |
+-------------------------+
| oranges |
+-------------------------+
ARRAY_AGG
ARRAY_AGG(
[ DISTINCT ]
expression
[ { IGNORE | RESPECT } NULLS ]
[ ORDER BY key [ { ASC | DESC } ] [, ... ] ]
[ LIMIT n ]
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
expression
値の配列を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
最終的なクエリ結果の配列に NULL
要素が含まれている場合は、エラーが発生します。
サポートされる引数の型
ARRAY を除くすべてのデータ型。
返されるデータ型
ARRAY
入力行がない場合、この関数は NULL
を返します。
例
SELECT ARRAY_AGG(x) AS array_agg FROM UNNEST([2, 1,-2, 3, -2, 1, 2]) AS x;
+-------------------------+
| array_agg |
+-------------------------+
| [2, 1, -2, 3, -2, 1, 2] |
+-------------------------+
SELECT ARRAY_AGG(DISTINCT x) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;
+---------------+
| array_agg |
+---------------+
| [2, 1, -2, 3] |
+---------------+
SELECT ARRAY_AGG(x IGNORE NULLS) AS array_agg
FROM UNNEST([NULL, 1, -2, 3, -2, 1, NULL]) AS x;
+-------------------+
| array_agg |
+-------------------+
| [1, -2, 3, -2, 1] |
+-------------------+
SELECT ARRAY_AGG(x ORDER BY ABS(x)) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;
+-------------------------+
| array_agg |
+-------------------------+
| [1, 1, 2, -2, -2, 2, 3] |
+-------------------------+
SELECT ARRAY_AGG(x LIMIT 5) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;
+-------------------+
| array_agg |
+-------------------+
| [2, 1, -2, 3, -2] |
+-------------------+
WITH vals AS
(
SELECT 1 x UNION ALL
SELECT -2 x UNION ALL
SELECT 3 x UNION ALL
SELECT -2 x UNION ALL
SELECT 1 x
)
SELECT ARRAY_AGG(DISTINCT x ORDER BY x) as array_agg
FROM vals;
+------------+
| array_agg |
+------------+
| [-2, 1, 3] |
+------------+
WITH vals AS
(
SELECT 1 x, 'a' y UNION ALL
SELECT 1 x, 'b' y UNION ALL
SELECT 2 x, 'a' y UNION ALL
SELECT 2 x, 'c' y
)
SELECT x, ARRAY_AGG(y) as array_agg
FROM vals
GROUP BY x;
+---------------+
| x | array_agg |
+---------------+
| 1 | [a, b] |
| 2 | [a, c] |
+---------------+
SELECT
x,
ARRAY_AGG(x) OVER (ORDER BY ABS(x)) AS array_agg
FROM UNNEST([2, 1, -2, 3, -2, 1, 2]) AS x;
+----+-------------------------+
| x | array_agg |
+----+-------------------------+
| 1 | [1, 1] |
| 1 | [1, 1] |
| 2 | [1, 1, 2, -2, -2, 2] |
| -2 | [1, 1, 2, -2, -2, 2] |
| -2 | [1, 1, 2, -2, -2, 2] |
| 2 | [1, 1, 2, -2, -2, 2] |
| 3 | [1, 1, 2, -2, -2, 2, 3] |
+----+-------------------------+
ARRAY_CONCAT_AGG
ARRAY_CONCAT_AGG(
expression
[ ORDER BY key [ { ASC | DESC } ] [, ... ] ]
[ LIMIT n ]
)
説明
ARRAY
型の expression
から要素を結合し、結果として単一の配列を返します。
この関数は、NULL
入力配列を無視しますが、NULL
以外の入力配列の NULL
要素は無視しません。ただし、最終的なクエリ結果の配列に NULL
要素が含まれている場合は、エラーが発生します。入力行がない場合、または expression
がすべての行で NULL
と評価される場合は、NULL
を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
サポートされる引数の型
ARRAY
返されるデータ型
ARRAY
例
SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x)) AS array_concat_agg FROM (
SELECT [NULL, 1, 2, 3, 4] AS x
UNION ALL SELECT NULL
UNION ALL SELECT [5, 6]
UNION ALL SELECT [7, 8, 9]
);
+-----------------------------------+
| array_concat_agg |
+-----------------------------------+
| [NULL, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
+-----------------------------------+
SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x))) AS array_concat_agg FROM (
SELECT [1, 2, 3, 4] AS x
UNION ALL SELECT [5, 6]
UNION ALL SELECT [7, 8, 9]
);
+-----------------------------------+
| array_concat_agg |
+-----------------------------------+
| [5, 6, 7, 8, 9, 1, 2, 3, 4] |
+-----------------------------------+
SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x LIMIT 2)) AS array_concat_agg FROM (
SELECT [1, 2, 3, 4] AS x
UNION ALL SELECT [5, 6]
UNION ALL SELECT [7, 8, 9]
);
+--------------------------+
| array_concat_agg |
+--------------------------+
| [1, 2, 3, 4, 5, 6] |
+--------------------------+
SELECT FORMAT("%T", ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x) LIMIT 2)) AS array_concat_agg FROM (
SELECT [1, 2, 3, 4] AS x
UNION ALL SELECT [5, 6]
UNION ALL SELECT [7, 8, 9]
);
+------------------+
| array_concat_agg |
+------------------+
| [5, 6, 7, 8, 9] |
+------------------+
AVG
AVG(
[ DISTINCT ]
expression
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
集計されたグループ内で NULL
以外の値の平均を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
注意点:
- 集計グループが空か、グループ内のすべての行で引数が
NULL
の場合、NULL
を返します。 - グループ内の任意の行の引数が
NaN
の場合、NaN
を返します。 - グループ内の任意の行の引数が
[+|-]Infinity
の場合、[+|-]Infinity
またはNaN
を返します。 - 数値オーバーフローがある場合、エラーが発生します。
- 浮動小数点型が返される場合、結果は変動する可能性があります。つまり、この関数を使用するたびに異なる結果を受け取る可能性があります。
サポートされる引数の型
- 任意の数値入力型
INTERVAL
返されるデータ型
入力 | INT64 | NUMERIC | BIGNUMERIC | FLOAT64 | INTERVAL |
---|---|---|---|---|---|
OUTPUT | FLOAT64 | NUMERIC | BIGNUMERIC | FLOAT64 | INTERVAL |
例
SELECT AVG(x) as avg
FROM UNNEST([0, 2, 4, 4, 5]) as x;
+-----+
| avg |
+-----+
| 3 |
+-----+
SELECT AVG(DISTINCT x) AS avg
FROM UNNEST([0, 2, 4, 4, 5]) AS x;
+------+
| avg |
+------+
| 2.75 |
+------+
SELECT
x,
AVG(x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS avg
FROM UNNEST([0, 2, NULL, 4, 4, 5]) AS x;
+------+------+
| x | avg |
+------+------+
| NULL | NULL |
| 0 | 0 |
| 2 | 1 |
| 4 | 3 |
| 4 | 4 |
| 5 | 4.5 |
+------+------+
BIT_AND
BIT_AND(
expression
)
説明
expression
でビット積演算を実行し、結果を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
サポートされる引数の型
- INT64
返されるデータ型
INT64
例
SELECT BIT_AND(x) as bit_and FROM UNNEST([0xF001, 0x00A1]) as x;
+---------+
| bit_and |
+---------+
| 1 |
+---------+
BIT_OR
BIT_OR(
expression
)
説明
expression
に対してビット論理和演算を実行し、結果を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
サポートされる引数の型
- INT64
返されるデータ型
INT64
例
SELECT BIT_OR(x) as bit_or FROM UNNEST([0xF001, 0x00A1]) as x;
+--------+
| bit_or |
+--------+
| 61601 |
+--------+
BIT_XOR
BIT_XOR(
[ DISTINCT ]
expression
)
説明
expression
でビット排他論理和演算を実行し、結果を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
サポートされる引数の型
- INT64
返されるデータ型
INT64
例
SELECT BIT_XOR(x) AS bit_xor FROM UNNEST([5678, 1234]) AS x;
+---------+
| bit_xor |
+---------+
| 4860 |
+---------+
SELECT BIT_XOR(x) AS bit_xor FROM UNNEST([1234, 5678, 1234]) AS x;
+---------+
| bit_xor |
+---------+
| 5678 |
+---------+
SELECT BIT_XOR(DISTINCT x) AS bit_xor FROM UNNEST([1234, 5678, 1234]) AS x;
+---------+
| bit_xor |
+---------+
| 4860 |
+---------+
COUNT
1.
COUNT(*)
[OVER over_clause]
2.
COUNT(
[ DISTINCT ]
expression
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
- 入力内の行数を返します。
expression
がNULL
以外の値と評価された行の数を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
DISTINCT を含むこの関数では、照合を指定できます。
サポートされる引数の型
expression
には任意のデータ型を指定できます。DISTINCT
が存在する場合、expression
にはグループ化可能なデータ型のみ指定できます。
戻りデータの型
INT64
例
COUNT
関数を使用して、テーブル内の行数または式で重複しない値の数を返すことができます。次に例を示します。
SELECT
COUNT(*) AS count_star,
COUNT(DISTINCT x) AS count_dist_x
FROM UNNEST([1, 4, 4, 5]) AS x;
+------------+--------------+
| count_star | count_dist_x |
+------------+--------------+
| 4 | 3 |
+------------+--------------+
SELECT
x,
COUNT(*) OVER (PARTITION BY MOD(x, 3)) AS count_star,
COUNT(DISTINCT x) OVER (PARTITION BY MOD(x, 3)) AS count_dist_x
FROM UNNEST([1, 4, 4, 5]) AS x;
+------+------------+--------------+
| x | count_star | count_dist_x |
+------+------------+--------------+
| 1 | 3 | 2 |
| 4 | 3 | 2 |
| 4 | 3 | 2 |
| 5 | 1 | 1 |
+------+------------+--------------+
SELECT
x,
COUNT(*) OVER (PARTITION BY MOD(x, 3)) AS count_star,
COUNT(x) OVER (PARTITION BY MOD(x, 3)) AS count_x
FROM UNNEST([1, 4, NULL, 4, 5]) AS x;
+------+------------+---------+
| x | count_star | count_x |
+------+------------+---------+
| NULL | 1 | 0 |
| 1 | 3 | 3 |
| 4 | 3 | 3 |
| 4 | 3 | 3 |
| 5 | 1 | 1 |
+------+------------+---------+
特定の条件を満たす式で重複しない値の数をカウントする場合は、次のようなレシピを使用できます。
COUNT(DISTINCT IF(condition, expression, NULL))
ここで、IF
は、condition
が TRUE
の場合は expression
の値を返し、それ以外の場合は NULL
を返します。囲んでいる COUNT(DISTINCT ...)
は NULL
値を無視するため、condition
が TRUE
である expression
の値のみがカウントされます。
たとえば、x
の重複しない正の値をカウントするには:
SELECT COUNT(DISTINCT IF(x > 0, x, NULL)) AS distinct_positive
FROM UNNEST([1, -2, 4, 1, -5, 4, 1, 3, -6, 1]) AS x;
+-------------------+
| distinct_positive |
+-------------------+
| 3 |
+-------------------+
また、特定の種類のイベントが発生した個別の日付の数をカウントするには:
WITH Events AS (
SELECT DATE '2021-01-01' AS event_date, 'SUCCESS' AS event_type
UNION ALL
SELECT DATE '2021-01-02' AS event_date, 'SUCCESS' AS event_type
UNION ALL
SELECT DATE '2021-01-02' AS event_date, 'FAILURE' AS event_type
UNION ALL
SELECT DATE '2021-01-03' AS event_date, 'SUCCESS' AS event_type
UNION ALL
SELECT DATE '2021-01-04' AS event_date, 'FAILURE' AS event_type
UNION ALL
SELECT DATE '2021-01-04' AS event_date, 'FAILURE' AS event_type
)
SELECT
COUNT(DISTINCT IF(event_type = 'FAILURE', event_date, NULL))
AS distinct_dates_with_failures
FROM Events;
+------------------------------+
| distinct_dates_with_failures |
+------------------------------+
| 2 |
+------------------------------+
COUNTIF
COUNTIF(
expression
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
expression
に対する TRUE
の値の数を返します。入力行がない場合、または expression
がすべての行に対して FALSE
または NULL
と評価される場合に 0
を返します。
expression
は BOOL
でなければならないため、COUNTIF(DISTINCT ...)
形式はサポートされません。TRUE
で重複しない値は 1 つだけのため、これは有用ではありません。通常、COUNTIF
と DISTINCT
を組み合わせる必要がある場合は、特定の条件を満たす式で重複しない値をカウントします。これを実現するレシピの 1 つは次のとおりです。
COUNT(DISTINCT IF(condition, expression, NULL))
これは COUNTIF
ではなく COUNT
を使用していることに注意してください。IF
の部分が内部に移動しています。詳細については、COUNT
の例をご覧ください。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
サポートされる引数の型
BOOL
戻りデータの型
INT64
例
SELECT COUNTIF(x<0) AS num_negative, COUNTIF(x>0) AS num_positive
FROM UNNEST([5, -2, 3, 6, -10, -7, 4, 0]) AS x;
+--------------+--------------+
| num_negative | num_positive |
+--------------+--------------+
| 3 | 4 |
+--------------+--------------+
SELECT
x,
COUNTIF(x<0) OVER (ORDER BY ABS(x) ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS num_negative
FROM UNNEST([5, -2, 3, 6, -10, NULL, -7, 4, 0]) AS x;
+------+--------------+
| x | num_negative |
+------+--------------+
| NULL | 0 |
| 0 | 1 |
| -2 | 1 |
| 3 | 1 |
| 4 | 0 |
| 5 | 0 |
| 6 | 1 |
| -7 | 2 |
| -10 | 2 |
+------+--------------+
LOGICAL_AND
LOGICAL_AND(
expression
)
説明
すべての非 NULL
式の論理 AND を返します。入力行がない場合、または expression
がすべての行で NULL
と評価される場合に NULL
を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
サポートされる引数の型
BOOL
戻りデータの型
BOOL
例
配列内のすべての値が 3 未満ではないため、LOGICAL_AND
は FALSE
を返します。
SELECT LOGICAL_AND(x < 3) AS logical_and FROM UNNEST([1, 2, 4]) AS x;
+-------------+
| logical_and |
+-------------+
| FALSE |
+-------------+
LOGICAL_OR
LOGICAL_OR(
expression
)
説明
すべての非 NULL
式の論理 OR を返します。入力行がない場合、または expression
がすべての行で NULL
と評価される場合に NULL
を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
サポートされる引数の型
BOOL
戻りデータの型
BOOL
例
配列内の少なくとも 1 つの値が 3 未満であるため、LOGICAL_OR
は TRUE
を返します。
SELECT LOGICAL_OR(x < 3) AS logical_or FROM UNNEST([1, 2, 4]) AS x;
+------------+
| logical_or |
+------------+
| TRUE |
+------------+
MAX
MAX(
expression
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
集計されたグループ内で NULL
以外の最大値を返します。
注意点:
- 集計グループが空か、グループ内のすべての行で引数が
NULL
の場合、NULL
を返します。 - グループ内の任意の行の引数が
NaN
の場合、NaN
を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
この関数では、照合を指定できます。
サポートされる引数の型
ARRAY
を除く順序付け可能なデータ型。
戻りデータの型
入力値のデータ型。
例
SELECT MAX(x) AS max
FROM UNNEST([8, 37, 55, 4]) AS x;
+-----+
| max |
+-----+
| 55 |
+-----+
SELECT x, MAX(x) OVER (PARTITION BY MOD(x, 2)) AS max
FROM UNNEST([8, NULL, 37, 55, NULL, 4]) AS x;
+------+------+
| x | max |
+------+------+
| NULL | NULL |
| NULL | NULL |
| 8 | 8 |
| 4 | 8 |
| 37 | 55 |
| 55 | 55 |
+------+------+
MIN
MIN(
expression
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
集計されたグループ内で NULL
以外の最小値を返します。
注意点:
- 集計グループが空か、グループ内のすべての行で引数が
NULL
の場合、NULL
を返します。 - グループ内の任意の行の引数が
NaN
の場合、NaN
を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
この関数では、照合を指定できます。
サポートされる引数の型
ARRAY
を除く順序付け可能なデータ型。
戻りデータの型
入力値のデータ型。
例
SELECT MIN(x) AS min
FROM UNNEST([8, 37, 4, 55]) AS x;
+-----+
| min |
+-----+
| 4 |
+-----+
SELECT x, MIN(x) OVER (PARTITION BY MOD(x, 2)) AS min
FROM UNNEST([8, NULL, 37, 4, NULL, 55]) AS x;
+------+------+
| x | min |
+------+------+
| NULL | NULL |
| NULL | NULL |
| 8 | 4 |
| 4 | 4 |
| 37 | 37 |
| 55 | 37 |
+------+------+
STRING_AGG
STRING_AGG(
[ DISTINCT ]
expression [, delimiter]
[ ORDER BY key [ { ASC | DESC } ] [, ... ] ]
[ LIMIT n ]
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
非 NULL
値を連結して得られた値(STRING
または BYTES
のいずれか)を返します。入力行がない場合、または expression
がすべての行で NULL
と評価される場合に NULL
を返します。
delimiter
が指定された場合、連結された値はその区切り文字で区切られ、それ以外の場合は区切り文字としてカンマが使用されます。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
サポートされる引数の型
STRING
または BYTES
のいずれか。
戻りデータの型
STRING
または BYTES
のいずれか。
例
SELECT STRING_AGG(fruit) AS string_agg
FROM UNNEST(["apple", NULL, "pear", "banana", "pear"]) AS fruit;
+------------------------+
| string_agg |
+------------------------+
| apple,pear,banana,pear |
+------------------------+
SELECT STRING_AGG(fruit, " & ") AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;
+------------------------------+
| string_agg |
+------------------------------+
| apple & pear & banana & pear |
+------------------------------+
SELECT STRING_AGG(DISTINCT fruit, " & ") AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;
+-----------------------+
| string_agg |
+-----------------------+
| apple & pear & banana |
+-----------------------+
SELECT STRING_AGG(fruit, " & " ORDER BY LENGTH(fruit)) AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;
+------------------------------+
| string_agg |
+------------------------------+
| pear & pear & apple & banana |
+------------------------------+
SELECT STRING_AGG(fruit, " & " LIMIT 2) AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;
+--------------+
| string_agg |
+--------------+
| apple & pear |
+--------------+
SELECT STRING_AGG(DISTINCT fruit, " & " ORDER BY fruit DESC LIMIT 2) AS string_agg
FROM UNNEST(["apple", "pear", "banana", "pear"]) AS fruit;
+---------------+
| string_agg |
+---------------+
| pear & banana |
+---------------+
SELECT
fruit,
STRING_AGG(fruit, " & ") OVER (ORDER BY LENGTH(fruit)) AS string_agg
FROM UNNEST(["apple", NULL, "pear", "banana", "pear"]) AS fruit;
+--------+------------------------------+
| fruit | string_agg |
+--------+------------------------------+
| NULL | NULL |
| pear | pear & pear |
| pear | pear & pear |
| apple | pear & pear & apple |
| banana | pear & pear & apple & banana |
+--------+------------------------------+
SUM
SUM(
[ DISTINCT ]
expression
)
[ OVER over_clause ]
over_clause:
{ named_window | ( [ window_specification ] ) }
window_specification:
[ named_window ]
[ PARTITION BY partition_expression [, ...] ]
[ ORDER BY expression [ { ASC | DESC } ] [, ...] ]
[ window_frame_clause ]
説明
集計されたグループ内で NULL
以外の値の合計を返します。
この関数のオプションの引数とそれらの使用方法については、集計関数の呼び出しをご覧ください。
OVER
句とその使用方法について詳しくは、ウィンドウ関数の呼び出しをご覧ください。
注意点:
- 集計グループが空か、グループ内のすべての行で引数が
NULL
の場合、NULL
を返します。 - グループ内の任意の行の引数が
NaN
の場合、NaN
を返します。 - グループ内の任意の行の引数が
[+|-]Infinity
の場合、[+|-]Infinity
またはNaN
を返します。 - 数値オーバーフローがある場合、エラーが発生します。
- 浮動小数点型が返される場合、結果は変動する可能性があります。つまり、この関数を使用するたびに異なる結果を受け取る可能性があります。
サポートされる引数の型
- サポートされているすべての数値データ型
INTERVAL
戻りデータの型
入力 | INT64 | NUMERIC | BIGNUMERIC | FLOAT64 | INTERVAL |
---|---|---|---|---|---|
OUTPUT | INT64 | NUMERIC | BIGNUMERIC | FLOAT64 | INTERVAL |
例
SELECT SUM(x) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;
+-----+
| sum |
+-----+
| 25 |
+-----+
SELECT SUM(DISTINCT x) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;
+-----+
| sum |
+-----+
| 15 |
+-----+
SELECT
x,
SUM(x) OVER (PARTITION BY MOD(x, 3)) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;
+---+-----+
| x | sum |
+---+-----+
| 3 | 6 |
| 3 | 6 |
| 1 | 10 |
| 4 | 10 |
| 4 | 10 |
| 1 | 10 |
| 2 | 9 |
| 5 | 9 |
| 2 | 9 |
+---+-----+
SELECT
x,
SUM(DISTINCT x) OVER (PARTITION BY MOD(x, 3)) AS sum
FROM UNNEST([1, 2, 3, 4, 5, 4, 3, 2, 1]) AS x;
+---+-----+
| x | sum |
+---+-----+
| 3 | 3 |
| 3 | 3 |
| 1 | 5 |
| 4 | 5 |
| 4 | 5 |
| 1 | 5 |
| 2 | 7 |
| 5 | 7 |
| 2 | 7 |
+---+-----+
SELECT SUM(x) AS sum
FROM UNNEST([]) AS x;
+------+
| sum |
+------+
| NULL |
+------+