如何找到不同行之间的所有可能的连接?

时间:2019-08-08 16:16:59

标签: google-bigquery bigquery-standard-sql

我们公司要求用户输入各种信息,包括地址和车牌,以获得汽车保险报价 我们将此信息存储在BigQuery中。 一些用户在不同的时间输入了一个以上的车牌(他们可能拥有不止一辆汽车)和一个以上的地址。 基本上结构看起来像这样

JSON

我们希望利用这两条信息之间的所有链接,将一位用户的所有信息排成一行 上表均具有连接,因此应位于

这有可能吗?什么是最佳实践? 我们已经对STRING_AGG和ARRAY_AGG进行了试验,但尚未找到解决方案。

1 个答案:

答案 0 :(得分:0)

假设您还有一个额外的列user_id,并输入了表格:

  row  user_id  info_1   info_2  
 ----- -------- -------- -------- 
    1    u1       a        y       
    2    u2       a        x       
    3    u1       b        y       
    4    u1       b        z       
    5    u2       c        z       
    6    u2       a        z       

以下查询为您分别提供两个info_1info_1的不同元素的列表:

select
    user_id,
    array_agg(disctinc info_1) as element_in_info_1,
    array_agg(disctinc info_2) as element_in_info_2,
from table
group by 1

带有输入数据的测试示例

with table as (
  select 'u1' as user_id, 'a' as info_1, 'y' as info_2 union all
  select 'u2' as user_id, 'a' as info_1, 'x' as info_2 union all
  select 'u1' as user_id, 'b' as info_1, 'y' as info_2 union all
  select 'u1' as user_id, 'b' as info_1, 'z' as info_2 union all
  select 'u2' as user_id, 'c' as info_1, 'z' as info_2 union all
  select 'u2' as user_id, 'a' as info_1, 'z' as info_2
)
select
    user_id,
    array_agg(distinct info_1) as element_in_info_1,
    array_agg(distinct info_2) as element_in_info_2
from table
group by 1

结果

Query results