ExcelのCOUNTIF関数は、条件に一致する件数をカウントする便利関数。
=COUNTIF(A1:A3, "Apple")
みたいなの。
これをSQLでやる場合、SUMとCASEを組み合わせてやる。
CASE使って、条件に一致する場合1、しない場合0としてやってその合計をSUMで出す。
COLA |
---|
Apple |
Orange |
Apple |
例えば上の表TBLAからCOLA=Appleの件数を抽出する場合、下記で出す。
SELECT
SUM(CASE WHEN COLA='Apple' THEN 1 ELSE 0 END) AS CNT
FROM TBLA;
CNT |
---|
2 |
・・・
ツッコんだ人も多いと思うけど、この要件ならこんなことしなくてもWHEREで条件入れてCOUNTとれば事足りる。
SELECT COUNT(*) AS CNT FROM TBLA WHERE COLA='Apple';
わざわざSUMとCASE使うメリットはWHEREを使わないということぐらい。
なので、異なる条件の件数を同時に取得したい、って場合に使える。
例えば全件数とCOLA=Appleの件数を1回のSQLで同時に取得したい場合、
SELECT
COUNT(*) AS ALL_CNT
,SUM(CASE WHEN COLA='Apple' THEN 1 ELSE 0 END) AS APPLE_CNT
FROM TBLA;
ALL_CNT | APPLE_CNT |
---|---|
3 | 2 |
わりとSUMとCASEを組み合わせることで、1回のSQLで色々取得することが出来るようになるので便利。
※ DB2 10で確認しました