【问题标题】:How to join one table with two different tables with similar fields in BigQuery?如何在 BigQuery 中将一个表与两个具有相似字段的不同表连接起来?
【发布时间】:2020-10-16 05:47:54
【问题描述】:

我在 BigQuery 中有 3 个表。 我需要加入第一个(包含 id)和其他人(包含 id 的值列表)。我想通过两个表中的 id 获得值的总和:

SELECT t0.id, sum(values) FROM t0
LEFT JOIN t1 ON t0.id = t1.id
LEFT JOIN t2 ON t0.id = t2.id
GROUP BY id

它不起作用,出现错误Column name values is ambiguous 最好的制作方法是什么?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:
    SELECT t0.id, sum(t1.values) + sum(t2.values) as sumOfValues FROM t0
    LEFT JOIN t1 ON t0.id = t1.id
    LEFT JOIN t2 ON t0.id = t2.id
    GROUP BY id
    

    【讨论】:

      【解决方案2】:

      我认为下面更能反映你的原始想法

      #standardSQL
      SELECT id, sum(u.values) 
      FROM t0
      LEFT JOIN (
        SELECT id, values FROM t1 UNION ALL
        SELECT id, values FROM t2
      ) u
      USING (id)
      GROUP BY id
      

      【讨论】:

      • 感谢您的回复。这是我的第一个想法,但我寻找“最好”的方法来让它变得更好,尤其是通过运行时间。我不知道它是如何工作的理论细节,但我认为UNION 语句的运行速度比双连接慢。也许我错了,因为我没有任何证据。你知道为什么UNION 工作缓慢还是只是神话?
      • 在我看来-至少在像您上面这样的简单情况下-UNION 比额外的 JOIN 更便宜且更优化-您可以比较两种方法的执行计划/统计数据并查看结果。很高兴知道您对真实数据的分析结果。同时,我仍然觉得 UNION 的方法在这里是“首选”
      猜你喜欢
      • 2018-02-09
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多