Google BigQuery[Standard SQL]-仅合并选定列上的行,数组agg其余 标准SQL
大家好, 我有一个大致如下的大查询表Google BigQuery[Standard SQL]-仅合并选定列上的行,数组agg其余 标准SQL,sql,merge,google-bigquery,duplicates,Sql,Merge,Google Bigquery,Duplicates,大家好, 我有一个大致如下的大查询表 team_id, channel_id, value_1, value_2,... A 1111 xxx yyy B 1111 xxx yyy C 2222 uuu vvv D 2222 uuu vvv E 3333 grr sss 如您所见,目前,所有内容都由团队id
team_id, channel_id, value_1, value_2,...
A 1111 xxx yyy
B 1111 xxx yyy
C 2222 uuu vvv
D 2222 uuu vvv
E 3333 grr sss
如您所见,目前,所有内容都由团队id索引,而具有相同通道id的所有数据都是相同的。我需要按通道id对数据进行索引。结果应如下所示:
team_id, channel_id, value_1, value_2,...
[A,B] 1111 xxx yyy
[C,D] 2222 uuu vvv
[E] 3333 grr sss
这样,具有相同通道ID的行将减少为一行,但团队ID将合并到一个数组中。这可能吗?
我对SQL/BigQuery还是一个新手,不知道怎么做。我很高兴能得到一些帮助
提前多谢 我想您只需要聚合:
select array_agg(team_id) as team_ids, channel_id, value_1, value_2
from t
group by channel_id, value_1, value_2;
下面是BigQuery标准SQL 。。。具有相同通道id的所有数据都是相同的 因此,下面不需要显式列出所有这些列,以便为任意数量的列及其名称编写相同的代码
#standardSQL
SELECT ARRAY_AGG(team_id) AS team_id, ANY_VALUE(str).*
FROM (
SELECT team_id,
(SELECT AS STRUCT * EXCEPT(team_id) FROM UNNEST([t])) AS str
FROM `project.dataset.table` t
)
GROUP BY TO_JSON_STRING(str)
取决于您的编码首选项-您可以使用上述的重构版本
#standardSQL
SELECT ARRAY_AGG(team_id) AS team_id,
ANY_VALUE((SELECT AS STRUCT * EXCEPT(team_id) FROM UNNEST([t]))).*
FROM `project.dataset.table` t
GROUP BY TO_JSON_STRING((SELECT AS STRUCT * EXCEPT(team_id) FROM UNNEST([t])))
在这两种情况下,如果要应用于问题中的样本数据,则输出如下
Row team_id channel_id value_1 value_2
1 A 1111 xxx yyy
B
2 C 2222 uuu vvv
D
3 E 3333 grr sss