我有一个 PostgreSQL 9.2.1 数据库,我正在尝试编写 SQL 查询但未能成功,该查询将向我显示失败的不同测试 ( testname
) 的计数(current_status='FAILED'
如果没有失败则显示 0),按月分隔( last_update
)。这是表定义:
Table "public.tests"
Column | Type | Modifiers
----------------+-----------------------------+-------------------------------------------------------------
id | bigint | not null default nextval('tests_id_seq'::regclass)
testname | text | not null
last_update | timestamp without time zone | not null default now()
current_status | text | not null
我想从中得到的是这样的:
testname | Jan2012 | Feb2012 | Mar2012 | Apr2012 | May2012 | Jun2012 | Jul2012 | Aug2012 | Sep2012 | Oct2012 | Nov2012 | Dec2012
-------------+-----------------------------------------------------------------------------------------------------------------------------------------
abq | 2 | 5 | 2 | 0 | 7 | 4 | 8 | 0 | 6 | 15 | 1 | 0
bar | 0 | 0 | 2 | 0 | 9 | 8 | 8 | 2 | 6 | 15 | 1 | 1
cho | 15 | 1 | 2 | 3 | 4 | 8 | 7 | 3 | 6 | 1 | 5 | 6
在这一点上,我能想到的最好的方法是以下,诚然不是很接近:
SELECT testname, count(current_status) AS failure_count
FROM tests
WHERE current_status='FAILED'
AND last_update>'2012-09-01'
AND last_update<='2012-09-30'
GROUP by testname
ORDER BY testname ;
我想我需要以某种方式COALESCE
获取0
值以显示在结果中,加上一些疯狂的 JOIN 来显示多个月的结果,甚至可能是一个窗口函数?