google-bigquery - 从标题和详细信息表创建嵌套表
问题描述
我想创建一个包含订单数据的嵌套表。我有订单和 order_details 表。关键是 order_id。当我明确写入字段名称时,它工作正常,但我的表每个都有 20 个字段。有没有办法选择所有字段?
这就是我现在所做的(例如几个字段):
with orders as(
select
order_id
,order_date
,store
from `orders`
)
, order_details as(
select
order_id
,order_date
,product_id
,amount
from `order_details`
)
select
orders.order_id
,orders.order_date
,orders.store
,array_agg(struct(order_details.product_id,order_details.amount)) as order_details
from orders
left join order_details using(order_id)
group by 1,2,3
我想做这样的事情:
with orders as(
select
*
from `orders`
)
, order_details as(
select
*
from `order_details`
)
select
orders.*
,array_agg(struct(select order_details.*) as order_details
from orders
left join order_details using(order_id)
group by 1,2,3,4,5.........................
任何建议如何做到这一点?分组依据必须包括订单表中的所有字段。有没有更好的方法呢?
解决方案
考虑以下方法 - 完全按照您的要求
select
any_value(o).*,
array_agg(d) as order_details
from orders o
left join order_details d
using(order_id)
group by to_json_string(o)
推荐阅读
- java - ApiException 需要 Throwable,发现 CustomException
- python - 如果日期在当前索引和上一个索引之间,则将值添加到具有“日期时间”索引的数据框的当前行
- c++ - C 字符串作为模板非类型参数适用于 gcc 6.3,但不适用于 Visual Studio 2017(19.16.27027.1 for x64)
- javascript - 使用 JQuery Find 方法在 HTML 表中查找复选框
- odoo - Odoo 继承字段和功能
- linux - 指定 GCC 输出二进制文件的预期 Linux 版本
- dart - 如何从flutter redux中的void方法调用调度动作
- javascript - 角 matMenuTriggerRestoreFocus 不起作用
- reference - Prolog比较变量的方法
- firebase - 如何从 Google 表格访问 Cloud Firestore?