SQL-重复的值总和,基于选择的日期

时间:2019-02-19 12:50:54

标签: sql google-bigquery google-data-studio google-data

目前,我需要一件简单的事情:

sale_date    Gross    SUM_GROSS
2018-01-01   1        6
2018-01-02   2        6
2018-01-03   3        6

我知道前面已经提到的这个问题,现在的区别是,我需要根据选定的日期计算总和。 (我使用大查询)

SUM(SALES.GrossValueBaseCurrency) OVER(PARTITION BY ???) AS SUM_GROSS

如果我要使用

SUM(SALES.GrossValueBaseCurrency) OVER(PARTITION BY SALE.SALE_DATE) AS SUM_GROSS

只有选择特定的一天,它才会给我我想要的东西。

如何使它起作用,所以如果我选择其他日期,SUM_GROSS将在选定的时间段内重复所有总值的总和?

示例数据和期望值:

预计 SUM_GROSS 列中的60

Row SALE_DATE   GROSS   SUM_GROSS
1   25/08/2018  10.00   60
2   04/10/2018  10.00   60
3   04/07/2018  10.00   60
4   01/03/2018  10.00   60
5   10/02/2018  10.00   60
6   10/01/2018  10.00   60

如果要查询该表,结果应该是:

SELECT SUM(GROSS) AS GROSS, SUM_GROSS FROM TABLE
WHERE SALE_DATE BETWEEN 01/01/2018 AND 01/04/2018
GROUP BY SUM_GROSS 

结果:

GROSS   SUM_GROSS
30      30

2 个答案:

答案 0 :(得分:1)

我认为您想在partition子句中进行对话:

SUM(SALES.GrossValueBaseCurrency) OVER (PARTITION BY EXTRACT(YEAR from SALE.SALE_DATE), EXTRACT(MONTH from SALE.SALE_DATE)) AS SUM_GROSS

编辑:

SELECT . . .,
       SUM(SALES.GrossValueBaseCurrency) OVER () AS SUM_GROSS 
FROM SALES s
WHERE SALE.SALE_DATE BETWEEN "2018-01-01 AND "2018-02-01"

答案 1 :(得分:0)

这是您要寻找的吗?

SUM(CASE WHEN sales.sale_date = '2018-01-01'
         THEN SALES.GrossValueBaseCurrency
         ELSE 0
    END) OVER () AS sales_20180101