【问题标题】:Calculating the difference in sum() between different days in SQL在 SQL 中计算不同日期之间 sum() 的差异
【发布时间】:2018-10-03 14:56:32
【问题描述】:

我有一个查询,我在其中对日期 = 昨天 (current_date - 1) 的列中的值求和:

SELECT sum(col) as sumCol
from `project.dataset.table`
where date = date_sub(current_date, interval 1 day)

我想要实现的是计算上述结果与前一天相同查询的结果之间的差异,即 where date = date_sub(current_date, interval 2 day)

我不确定如何在查询中创建此计算。我可以将上述内容与前一天的相同查询结合起来,但显然这给了我每天的一行,而不是计算 sum(col) 间隔 1 天 - 间隔 2 天?

任何帮助将不胜感激,为我指明正确的方向

谢谢

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    嗯,你可以使用条件聚合:

    select sum(case when date = date_sub(current_date, interval 1 day) then col else - col end) as diff
    from `project.dataset.table`
    where date in ( date_sub(current_date, interval 1 day), date_sub(current_date, interval 2 day) )
    

    编辑:

    更一般地,您可以使用条件聚合获得这两个值:

    select sum(case when date = date_sub(current_date, interval 1 day) then col  end) as yesterday,
           sum(case when date = date_sub(current_date, interval 2 day) then col  end) as day_before
    from `project.dataset.table`
    where date in ( date_sub(current_date, interval 1 day), date_sub(current_date, interval 2 day) )
    

    然后,您可以根据需要组合这些列。如果缺少值,它将是NULL,因此您可以安全地进行除法和缺失值。

    【讨论】:

    • 谢谢,这很有用。我试图用它来获得 % 变化,但我得到了 divide/0 错误:SUM(CASE WHEN date = DATE_SUB(current_date, INTERVAL 1 day) THEN col ELSE - col END / Clicks * 100) AS diff,
    • @Arron 。 . .您需要指定当一天的值为 0 时要执行的操作。
    • 只有一天,还是任何一行?因为我正在汇总最新级别
    • 谢谢,编辑后的查询完美运行,我可以在计算中组合列而不会出错。
    【解决方案2】:

    你有没有找到类似下面的东西

       SELECT
        ( sum(col) as sumCol
        from `project.dataset.table`
        where date = date_sub(current_date, interval 1 day)
         )-( sum(col) as sumCol
        from `project.dataset.table`
        where date = date_sub(current_date, interval 2 day)
         ) from project.dataset.table
    

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2010-11-07
      相关资源
      最近更新 更多