在 SQL 中计算不同日期之间 sum() 的差异
Posted
技术标签:
【中文标题】在 SQL 中计算不同日期之间 sum() 的差异【英文标题】:Calculating the difference in sum() between different days in SQL 【发布时间】: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 天?
任何帮助将不胜感激,为我指明正确的方向
谢谢
【问题讨论】:
【参考方案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
【讨论】:
以上是关于在 SQL 中计算不同日期之间 sum() 的差异的主要内容,如果未能解决你的问题,请参考以下文章