首页 > 解决方案 > 从标题和详细信息表创建嵌套表

问题描述

我想创建一个包含订单数据的嵌套表。我有订单和 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.........................

任何建议如何做到这一点?分组依据必须包括订单表中的所有字段。有没有更好的方法呢?

标签: google-bigquerynested-table

解决方案


考虑以下方法 - 完全按照您的要求

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)

推荐阅读