首先是我的桌子的一个例子:
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 ...
现在,例如,我需要每月计数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)
此示例的结果是:
2 1
5月2日和6月1日,但我需要所有12个月的输出,也没有数据的几个月。对于此示例,我需要此输出:
0 0 0 0 2 1 0 0 0 0 0 0
谢谢。
您可以使用如下generate_series()功能:
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
[sql fiddle demo](http://sqlfiddle.com/#!15/1fe0b/7)