Skip to content

BigQueryで特定カラムの要素を結合します

データの用意

SQL
WITH testData AS (
  SELECT 1 AS id, '赤身' as type,  'ブリ' AS name UNION ALL
  SELECT 2, '赤身', 'いわし' UNION ALL
  SELECT 3, '赤身', 'アジ' UNION ALL
  SELECT 4, '赤身', 'マグロ' UNION ALL
  SELECT 5, '赤身', 'カツオ' UNION ALL
  SELECT 6, '白身', 'タイ' UNION ALL
  SELECT 7, '赤身', 'サバ' UNION ALL
  SELECT 8, '白身', 'タラ' UNION ALL
  SELECT 9, '白身', 'フグ' UNION ALL
  SELECT 10, '白身', 'サケ' UNION ALL
  SELECT 11, '白身', 'サケ'
)
SELECT  * FROM testData;
idtypename
1赤身ブリ
2赤身いわし
3赤身アジ
4赤身マグロ
5赤身カツオ
6白身タイ
7赤身サバ
8白身タラ
9白身フグ
10白身サケ
11白身サケ

単純結合

SQL
SELECT  type, STRING_AGG(name) AS names  FROM testData GROUP BY type ;
typenames
赤身ブリ,いわし,アジ,マグロ,カツオ,サバ
白身タイ,タラ,フグ,サケ,サケ

重複なし結合

SQL
SELECT  type, STRING_AGG((DISTINCT name)  FROM testData GROUP BY type ;
typenames
赤身ブリ,いわし,アジ,マグロ,カツオ,サバ
白身タイ,タラ,フグ,サケ

重複なし結合(ソート)

SQL
SELECT  type, STRING_AGG((DISTINCT name ORDER BY name asc )  FROM testData GROUP BY type ;
typenames
赤身いわし,アジ,カツオ,サバ,ブリ,マグロ
白身サケ,タイ,タラ,フグ

区切り文字つきの結合

SQL
SELECT  type, STRING_AGG(DISTINCT name ,  'と'  ORDER BY name asc)  FROM testData GROUP BY type
typenames
赤身いわしとアジとカツオとサバとブリとマグロ
白身サケとタイとタラとフグ

参考サイト

BigQueryの標準SQLでGROUP_CONCATしたいときはSTRING_AGG