【问题标题】:BigQuery - Concatenate multiple rows into a single rowBigQuery - 将多行连接成一行
【发布时间】:2017-06-19 05:12:13
【问题描述】:

我有一个包含 2 列的 BigQuery 表:

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

预期输出:按 id 分组的连接名称

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

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以使用 GROUP_CONCAT

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

    【讨论】:

    • GROUP_CONCAT() 用于旧版 SQL,STRING_AGG() 用于标准 SQL
    【解决方案2】:

    对于 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
    

    STRING_CONCAT 中的可选ORDER BY name 允许您得到如下排序的名称列表

    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  
    

    【讨论】:

    • 这对我有帮助,很高兴地投票
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2022-11-23
    • 2023-01-15
    • 2021-10-04
    • 2016-06-29
    • 2021-05-06
    相关资源
    最近更新 更多