问题描述
考虑到我有以下数据集
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;