- カテゴリ:
集計関数 (半構造化データ)、 ウィンドウ関数 (一般)、 半構造化データ関数と構造化データ関数 (配列/オブジェクト)
ARRAY_AGG¶
配列にピボットされた入力値を返します。入力が空の場合、関数は空の配列を返します。
- エイリアス:
ARRAYAGG
構文¶
集計関数
ウィンドウ関数
引数¶
必須:
expr1配列に入れる値を決定する式(通常は列名)。
OVER()OVER 句は、関数がウィンドウ関数として使用されていることを指定します。詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。
オプション:
DISTINCT配列から重複する値を削除します。
WITHIN GROUP orderby_clause各配列の値の順序を決定する1つ以上の式(通常は列名)を含む句。
WITHIN GROUP(ORDER BY)構文は、 SELECT ステートメントのメインの ORDER BY 句と同じパラメーターをサポートしています。ORDER BY をご参照ください。
PARTITION BY expr2式(通常は列名)を指定するウィンドウ関数句。この式は、関数が適用される前に入力行をグループ化するパーティションを定義します。詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。
ORDER BY expr3[ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [{window_frame}]各パーティション内の順序を指定するオプション式、その後にオプションのウィンドウフレームが続きます。
window_frameの構文の詳細については、 ウィンドウ関数の構文と使用法 をご参照ください。この関数を範囲ベースのフレームで使用する場合、 ORDER BY 句は単一列のみをサポートします。行ベースのフレームにはこの制限はありません。
LIMIT はサポートされていません。
戻り値¶
ARRAY 型の値を返します。
ARRAY_AGG が1回の呼び出しで返すことができるデータの最大量は128 MB です。
使用上の注意¶
WITHIN GROUP(ORDER BY)を指定しない場合、各配列内の要素の順序は予測できません。(WITHIN GROUP 句以外の ORDERBY 句は、行内の配列要素の順序ではなく、出力行の順序に適用されます。)
WITHIN GROUP(ORDER BY)の式に数値を指定した場合、この数値は SELECT リストの列の序列としてではなく、数値定数として解析されます。このため、 WITHIN GROUP(ORDER BY) 式として数値を指定しないでください。
DISTINCT と WITHINGROUP を指定する場合は、両方が同じ列を参照する必要があります。例:
DISTINCT と WITHINGROUP に異なる列を指定すると、エラーが発生します。
DISTINCT と WITHINGROUP に同じ列を指定するか、 DISTINCT を省略する必要があります。
DISTINCT および WITHIN GROUP は、 OVER 句内に ORDER BY 句がない場合にのみウィンドウ関数呼び出しに対応します。OVER 句内で ORDER BY 句が使用されている場合、出力配列の値は同じデフォルト値順(つまり、
WITHIN GROUP (ORDER BY expr3)と同等の順序)に従います。NULL 値は出力から省略されます。
例¶
以下のクエリ例では、以下に示すテーブルとデータを使用しています。
この例は、 ARRAY_AGG()を使用しないクエリからのピボットされていない出力を示しています。この例と次の例の出力の違いは、 ARRAY_AGG()がデータをピボットすることを示しています。
この例は、 ARRAY_AGG()を使用して出力の列を単一行の配列にピボットする方法を示しています。
この例は、 ARRAY_AGG()で DISTINCT キーワードを使用する方法を示しています。
この例では、2つの別々の ORDER BY 句を使用します。1つは各行内の出力配列内の順序を制御し、もう1つは出力行の順序を制御します。
次の例では、別のデータセットを使用します。ARRAY_AGG 関数は、 ROWS BETWEEN ウィンドウフレームを持つウィンドウ関数として呼び出されます。まず、テーブルを作成し、14行をロードします。
次のクエリを実行します。ここには、結果セットの一部しか示されていないことに注意してください。