はじめ
PostgresSQでフラグごとの件数を1行で取得したいケースがあったのでFILTEを用いた書き方をメモ。
前提
PostgreSQL 9.4以上
例
ステータスが「1」のと「2」の件数を1行で取得する場合
SELECT
-- 条件1: statusが'1'のものをカウント
COUNT(*) FILTER (WHERE status = '1') AS s1_count,
-- 条件2: statusが'2'のものをカウント
COUNT(*) FILTER (WHERE status = '2') AS s2_count,
FROM
table;