【问题标题】:How do I join an ARRAY to a COLUMN?如何将 ARRAY 连接到 COLUMN?
【发布时间】:2022-11-19 12:53:26
【问题描述】:

我有两个大表 - Table_A 和 Table_B - 我想加入 ID 字段。 Table_A 中的“ID”是一列,Table_B 中的“IDs”是一个数组

Table_A:

ID  | City       | 
----+------------+
101 | London     |     
102 | Paris      | 
103 | Rome       | 
104 | Copenhagen | 
105 | Amsterdam  | 
106 | Berlin     | 
107 | Cardiff    | 
108 | Lisbon     | 

Table_B:

Date  | Sessions | IDs
------+----------+--------------
06-02 | 1        | [107,102]    
06-03 | 1        | [103]  
11-12 | 1        | [105,107,103]  
27-06 | 1        | [104,108]  
31-01 | 1        | [105]  
22-04 | 1        | [106,102]  
08-07 | 1        | [101,105,108]  
02-10 | 1        | [105]  

Desirable Output:

Date  | Sessions | ID          | City
------+----------+-------------+-------------
06-02 | 1        | 107         | Cardiff
      |          | 102         | Paris
06-03 | 1        | 103         | Rome
11-12 | 1        | 105         | Amsterdam
      |          | 107         | Cardiff
      |          | 103         | Rome
27-06 | 1        | 104         | Copenhagen
      |          | 108         | Lisbon
            ...

我尝试过将内部连接与 unnest 和 union all 结合使用,但没有任何效果。任何帮助,将不胜感激。

【问题讨论】:

  • 展示你的尝试

标签: sql google-bigquery


【解决方案1】:

沿着这些方向的东西应该会产生你正在寻找的结果

  select 
    date, 
    sessions, 
    array_agg(id_un) as id, 
    array_agg(city) as city 
  from table_b b, unnest (id) as id_un
  left join table_a a on id_un = a.id
  group by 1, 2

【讨论】:

    【解决方案2】:

    还请考虑以下方法

    select date, sessions, ids as id, 
      array(
        select city
        from b.ids id
        left join Table_A
        using(id)
      ) city
    from Table_B b              
    

    如果应用于您问题中的样本数据 - 输出是

    【讨论】:

      猜你喜欢
      • 2017-07-18
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多