缺少值的PostgreSQL组月份明智

Tro*_*lli 3 sql postgresql group-by

首先是我的桌子的一个例子:

id_object;time;value;status
1;2014-05-22 09:30:00;1234;1
1;2014-05-22 09:31:00;2341;2
1;2014-05-22 09:32:00;1234;1
...
1;2014-06-01 00:00:00;4321;1
...
Run Code Online (Sandbox Code Playgroud)

现在,例如,我需要每月计数status = 1和id_object = 1的所有行。这是我的查询:

SELECT COUNT(*)
FROM my_table
WHERE id_object=1
  AND status=1
  AND extract(YEAR FROM time)=2014
GROUP BY extract(MONTH FROM time)
Run Code Online (Sandbox Code Playgroud)

此示例的结果是:

2
1
Run Code Online (Sandbox Code Playgroud)

5月2日和6月1日,但我需要所有12个月的输出,也没有数据的几个月。对于此示例,我需要此输出:

0 0 0 0 2 1 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

谢谢。

Rom*_*kar 6

您可以使用如下generate_series()功能:

select
    g.month,
    count(m)
from generate_series(1, 12) as g(month)
    left outer join my_table as m on
        m.id_object = 1 and
        m.status = 1 and
        extract(year from m.time) = 2014 and
        extract(month from m.time) = g.month
group by g.month
order by g.month
Run Code Online (Sandbox Code Playgroud)

sql fiddle demo