【问题标题】:How can I sum multiple NUMERIC fields in BigQuery?如何对 BigQuery 中的多个 NUMERIC 字段求和?
【发布时间】:2021-07-02 12:59:44
【问题描述】:

我有下表,其中所有数字都是 NUMERIC:

Campaign_cost_month LinkedIn_Ads_1 LinkedIn_Ads_2
2021.01 85.46 12.37

我想将多个字段(这里我只显示其中两个)相加成一个总字段,如下所示:

Campaign_cost_month LinkedIn_Ads_1 LinkedIn_Ads_2 Total_cost
2021.01 85.46 12.37 97.83

我尝试使用这样的普通运算符,但它给出了 Total_cost 的空结果:

SELECT 
Campaign_cost_month,
LinkedIn_Ads_1,
LinkedIn_Ads_2,
LinkedIn_Ads_1 + LinkedIn_Ads_2 AS Total_cost
FROM dataset

【问题讨论】:

  • 无法重现此内容。您可能想提供有关您的用例的更多详细信息
  • 我刚刚尝试了这个确切的示例,它对我来说非常有效,它不是空结果,请检查您的类型。
  • 如果我将值“0”添加到所有空字段,它会起作用...如果任何字段为空,有没有办法让它起作用?

标签: google-bigquery operators


【解决方案1】:
SELECT 
Campaign_cost_month,
LinkedIn_Ads_1,
LinkedIn_Ads_2,
COALESCE(LinkedIn_Ads_1,0) + COALESCE(LinkedIn_Ads_2,0) AS Total_cost
FROM dataset

COALESCE 返回第一个非空表达式的值。
例如:COALESCE(a,b),这里将使用值a 但如果它是 NULL 那么它将使用值b

【讨论】:

    【解决方案2】:

    我想将多个字段(这里我只展示其中两个)汇总成一个总字段

    考虑以下方法

    create temp function custom_sum(arr array<float64>) as ((
      select sum(value) from unnest(arr) value
    ));
    select *, custom_sum([LinkedIn_Ads_1, LinkedIn_Ads_2, LinkedIn_Ads_3]) Total_cost
    from `project.dataset.table`     
    

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

    正如您在此处看到的那样 - 您不需要单独处理每个列的 NULL 值 - 而您只需在数组中提供列,UDF 会为您处理 :o)

    作为这种方法的一个额外好处 - 可以很容易地重构为动态构建该数组 - 因此您无需手动进行 - 查看我的其他帖子 - 我有很多这种方法的示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2018-06-14
      相关资源
      最近更新 更多