web-dev-qa-db-ja.com

BigQuery-複数の行を1つの行に連結します

2列のBigQueryテーブルがあります。

id|name
1|John
1|Tom
1|Bob
2|Jack
2|Tim

期待される出力:IDでグループ化された名前の連結

id|Text
1|John,Tom,Bob
2|Jack,Tim
8
Jaison

BigQuery標準SQLの場合:

#standardSQL
--WITH yourTable AS (
--  SELECT 1 AS id, 'John' AS name UNION ALL
--  SELECT 1, 'Tom' UNION ALL
--  SELECT 1, 'Bob' UNION ALL
--  SELECT 2, 'Jack' UNION ALL
--  SELECT 2, 'Tim' 
--)
SELECT 
  id, 
  STRING_AGG(name ORDER BY name) AS Text 
FROM yourTable 
GROUP BY id

オプションのORDER BY name 以内に STRING_CONCATは、以下のように名前のソートされたリストを取得することができます

id  Text     
1   Bob,John,Tom     
2   Jack,Tim     

レガシーSQLの場合

#legacySQL
SELECT 
  id, 
  GROUP_CONCAT(name) AS Text   
FROM yourTable
GROUP BY id  

ここでソート済みリストを出力する必要がある場合は、以下を使用できます(正式には、BigQuery Legacy SQLによってソート済みリストを取得することは保証されていませんが、実際のほとんどの場合は機能しました)

#legacySQL
SELECT 
  id, 
  GROUP_CONCAT(name) AS Text 
FROM (
  SELECT id, name 
  FROM yourTable 
  ORDER BY name
)
GROUP BY id  
14

GROUP_CONCATを使用できます

SELECT id, GROUP_CONCAT(name) AS Text FROM <dataset>.<table> GROUP BY name

1
Arianto Wibowo