Snowflakeなどで利用できるARRAY_AGG関数の使い方をご紹介します。
はじめに
SQLのARRAY_AGG
関数は、複数の行からの値を一つの配列にまとめる集計関数です。
データの集約やカスタムリストの作成に非常に便利です。
ARRAY_AGG
関数の詳細とその使用例について説明します。
ARRAY_AGG
関数の基本構文
ARRAY_AGG
関数の基本構文は以下の通りです。
ARRAY_AGG(expression [ORDER BY [sort_expression {ASC | DESC}], ...])
expression
配列に含める値を指定します。ORDER BY
配列内の値をソートする順序を指定します(オプション)。
サンプルデータ
まず、例として以下のような「社員」テーブルを使用します。
id | 名前 | 部署 |
---|---|---|
1 | 山田太郎 | 営業 |
2 | 佐藤花子 | 開発 |
3 | 鈴木一郎 | 営業 |
4 | 高橋次郎 | 開発 |
5 | 田中三郎 | 営業 |
使用例
基本例
営業部門に所属する社員の名前を配列として取得する例を示します。
SELECT ARRAY_AGG(名前 ORDER BY 名前) AS 営業部門社員
FROM 社員
WHERE 部署 = '営業';
結果は、以下のようになります。
営業部門社員 |
---|
{“山田太郎”, “鈴木一郎”, “田中三郎”} |
部署ごとに社員の名前を配列で取得
次に、部署ごとに社員の名前を配列で取得する例を示します。
SELECT 部署, ARRAY_AGG(名前 ORDER BY 名前) AS 部署ごとの社員
FROM 社員
GROUP BY 部署;
結果は以下のようになります。
部署 | 部署ごとの社員 |
---|---|
営業 | {“山田太郎”, “鈴木一郎”, “田中三郎”} |
開発 | {“佐藤花子”, “高橋次郎”} |
ARRAY_AGG
の実用例
ARRAY_AGG
関数は以下のような場面で役立ちます。
- レポート生成
- 特定の条件に合致するデータを配列として集約し、レポートに表示することで、可読性が向上します。
- データの可視化
- 配列データを利用して、特定のカテゴリ内のデータポイントをグラフやチャートとして表示できます。
- データ移行と統合
- 複数のレコードを単一のフィールドに集約し、他のシステムへのデータ移行や統合に役立ちます。
より複雑な使用例
例えば、各部署ごとに社員のIDをカンマ区切りの文字列として取得したい場合、ARRAY_AGG
を利用して次のようにします。
SELECT 部署, STRING_AGG(CAST(id AS VARCHAR), ',') AS 部署ごとの社員ID
FROM 社員
GROUP BY 部署;
結果は、以下のようになります。
部署 | 部署ごとの社員ID |
---|---|
営業 | 1,3,5 |
開発 | 2,4 |
おわりに
ARRAY_AGG
関数は、データの集約、カスタムリストの作成、複雑なデータ操作などに役立ちます。
使用できるデータベース製品については、各社のドキュメントをご確認ください。