【发布时间】: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
我有一个包含 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
您可以使用 GROUP_CONCAT
SELECT id, GROUP_CONCAT(name) AS Text FROM <dataset>.<table> GROUP BY id
【讨论】:
GROUP_CONCAT() 用于旧版 SQL,STRING_AGG() 用于标准 SQL
对于 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
【讨论】: