在大查询中生成连接表数组的最佳方法是什么?

bjg7j2ky  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(384)

我正在尝试用sql在big query内部进行一些数据转换。
假设我有三张table:
客户-有关客户的数据,如年龄等订阅-有关用户预订了哪些订阅的数据-有关客户如何与数字产品交互的数据。
我想用嵌套字段在一个表中收集这个。
我可以联接所有这些表,但我想将它们聚合到数组中。
所以,我得到的不是三张table,而是:

id:123,
name:David,
age:30,
subscritions: [{
  name:sub1
  price:10
},
{
  name:sub2
  price:20
}],
engagment: [{
  event:visited_product_x
  time:2020-06-10
},
{
  event:visited_product_y
  time:2020-06-10
}]

当然,我在select中使用了array\u agg。当只添加一个表时,效果非常好。但是,当添加另一行时,我会得到重复的行,这是我不想要的。所以,我想我不应该在select中使用array\u agg,而是应该在其他地方使用。
但解决这个问题的最好办法是什么?

ukxgm1gy

ukxgm1gy1#

您可以使用子查询来构造字段。像这样:

select c.*,
       (select array_agg(s)
        from substriptions s
        where s.user_id = c.user_id
       ) as subscriptions,
       (select array_agg(e)
        from engagements e
        where e.user_id = c.user_id
       ) as engagements
from customers c

相关问题