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、さらにはウィンドウ関数も必要ですか?