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」ならボタン押下などを判断して、そのレコード件数を集計する場合などです。