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