sqlのcountやsumの集計対象をフィルタリングする方法が便利すぎる

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

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

 

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

 

【例】

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

 

 

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

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

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

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

 



こんな記事も関係あるかも。読んでみてね。

コメントを残す

サブコンテンツ

このページの先頭へ