如何解决如何在 BigQuery 的左联接查询中按所有字段嵌套表进行分组?
我有大约 10 个表,我使用以下查询通过回合制作了一个大嵌套表:
R1 AS(
SELECT ANY_VALUE(Table1).*,ARRAY_AGG(( SELECT AS STRUCT Table2.* EXCEPT(ID))) AS Table2
FROM Table1 LEFT JOIN Table2 USING(ID)
GROUP BY Table1.ID),R2 AS(
SELECT ANY_VALUE(R1).*,ARRAY_AGG(( SELECT AS STRUCT Table3.* EXCEPT(ID))) AS Table3
FROM R1 LEFT JOIN Table3 USING(ID)
GROUP BY R1.ID),...
SELECT ANY_VALUE(R9).*,ARRAY_AGG(( SELECT AS STRUCT Table10.* EXCEPT(ID))) AS Table10
FROM R9 LEFT JOIN Table10 USING(ID)
问题是,例如在我的第一个表中,我可以有两个具有相同 ID 的记录,但其他一些字段会有所不同,我想将它们视为两个不同的记录,因此按表的所有字段分组,同时我加入。 然后我想对所有“子表”(查询中的 R 表)做同样的事情,这样我就可以按嵌套表的所有字段进行分组。
我怎样才能轻松做到?
我尝试了 GROUP BY Table1.*
但它不起作用...
提前致谢
解决方法
如何按所有字段分组...?
我试过 GROUP BY Table1.* 但它不起作用...
考虑下面的例子
SELECT ANY_VALUE(t1).*,ARRAY_AGG(( SELECT AS STRUCT t2.* EXCEPT(ID))) AS Table2
FROM Table1 t1 LEFT JOIN Table2 t2 USING(ID)
GROUP BY FORMAT('%t',t1)
,
...
FROM Table1 t1
...
GROUP BY to_json_string(t1)
,
你似乎想要这样的东西:
select *
from table1 t1 left join
(select t2.*
from table2 t2
where true
qualify row_number() over (partition by t2.id order by t2.id) = 0
) t2
using (id)
这使用 qualify
而不是 group by
来获取一行。
如果您不想要来自 table1
的所有行,您也可以减少它们:
select *
from (select t1.*
from table1 t1
where true
qualify row_number() over (partition by id,col1,col2 order by id) = 1
) t1 left join
(select t2.*
from table2 t2
where true
qualify row_number() over (partition by t2.id order by t2.id) = 0
) t2
using (id)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。