sqlのcountやsumの集計対象をフィルタリングする方法が便利すぎる(条件付きカウント)

sqlでselectする際に、ある項目でGroup byしながら、countしたりsumしたりすることがあります。

その際に、カウントもしくは合計するレコードにフィルタ条件をつけたい場合のやり方です。

よく、BIなどで利用される構文ですが、慣れるとすごく便利なので、メモしておきます。

select count(distinct case when 項目B = 0 then 項目A else NULL end) as count_a
from TBLA

上記のように集計関数の中にCASE文を使用し、カウントしたい条件の時にだけ、その値を評価するようにします。

上記の場合は、「項目B = 0」のときにだけ、「項目A 」を有効にし、それ以外の場合にNULL(無効)とします。

トランザクションテーブルのレコードの件数をカウントする場合に、ある項目の値によって、カウントする/しないを判断するのに使えます。

例えば、サイトのアクセスのレコードを集計する際に、ある項目が「1」ならクリック、「2」ならボタン押下などを判断して、そのレコード件数を集計する場合などです。