计算平均值AVG,包括Redshift DB中日期范围内的缺失数据

问题描述

考虑到我有以下数据集

   s_date   | sales 
------------+-------
 2020-08-04 |    10
 2020-08-05 |    20
 2020-08-07 |    10
 2020-08-08 |    20
 2020-08-09 |    10
 2020-08-10 |    30
 2020-08-11 |    20
 2020-08-12 |    10

我想计算每周“销售”的平均值。请注意,从2020-08-03开始的一周的日期2020-08-03和2020-08-06缺少数据。

当我使用 AVG()函数计算每周平均值时,它会根据可用记录来计算平均值。

以下是我正在尝试的查询以及从中得到的响应。

select trunc(date_trunc('WEEK',s_date)::timestamp) as week,avg(sales) 
from test_temp.sales group by week;

结果:

    week    | avg 
------------+-----
 2020-08-03 |  14
 2020-08-10 |  20

但是我想以0作为缺少日期的值来计算平均值。因此,应使用以下值进行平均计算。

   s_date   | sales 
------------+-------
 2020-08-03 |     0
 2020-08-04 |    10
 2020-08-05 |    20
 2020-08-06 |     0
 2020-08-07 |    10
 2020-08-08 |    20
 2020-08-09 |    10
 2020-08-10 |    30
 2020-08-11 |    20
 2020-08-12 |    10

预期结果:

    week    | avg 
------------+-----
 2020-08-03 |  10 // Expected value
 2020-08-10 |  20

有人可以让我知道如何计算预期的平均值吗?

此致,
保罗

解决方法

取总和除以7:

select trunc(date_trunc('WEEK',s_date)::timestamp) as week,sum(sales) / 7
from test_temp.sales
group by week;

编辑:

要处理最后一周,您可以执行以下操作:

select trunc(date_trunc('WEEK',sum(sales) / least(7,current_date - trunc(date_trunc('WEEK',s_date)::timestamp))
from test_temp.sales
group by week;