Postgres占位符为0数据

时间:2015-06-05 18:15:34

标签: postgresql

我有一些像这样的Postgres数据:

date       | count
2015-01-01 | 20
2015-01-02 | 15
2015-01-05 | 30

我想运行一个查询,将缺少日期的数据拉到0,如下所示:

date       | count
2015-01-01 | 20
2015-01-02 | 15
2015-01-03 |  0
2015-01-04 |  0
2015-01-05 | 30

这是一个非常广泛的日期,我需要它填补所有空白。我怎样才能用SQL实现这个目标?

2 个答案:

答案 0 :(得分:2)

给出一个表junk

     d      | c  
------------+----
 2015-01-01 | 20
 2015-01-02 | 15
 2015-01-05 | 30

运行

select fake.d, coalesce(j.c, 0) as c
from (select min(d) + generate_series(0,7,1) as d from junk) fake
     left outer join junk j on fake.d=j.d;

让我们:

     d      |     c 
------------+----------
 2015-01-01 |       20
 2015-01-02 |       15
 2015-01-03 |        0
 2015-01-04 |        0
 2015-01-05 |       30
 2015-01-06 |        0
 2015-01-07 |        0
 2015-01-08 |        0

您当然可以调整系列的开始日期,运行的长度等等。

答案 1 :(得分:0)

这些数据在哪里?到外部来源或其他表或视图?

这可能是一个更好的解决方案,但您可以使用另一个空值的整数列创建一个新表(或者在数据传输的任何位置使用excel)。然后使用当前数据集更新该表,然后将所有空值替换为零。

这是一种非常迂回的做事方式,但它会起作用。

我没有足够的代表发表评论:(

这也是一个很好的参考 Using COALESCE to handle NULL values in PostgreSQL