SELECT COUNT(DISTINCT COL_A) FROM TABLE_A;
上記のSQLはTABLE_AのCOL_Aに何種類のデータが入っているか特定するためのSQL・・・と思っていたのですが、意外な落とし穴がありました。
下記のようなデータがCOL_Aに設定されていたとします。
あ,い,あ,null,null,か,あ
これに対して最初のSQLを実行すると結果はいくつになるでしょうか。
なんと! 3 になります。
多くのSQLがそうであるように、COUNT(DISTINCT)ではnullの考慮ができません。
これでは該当項目に何種類のデータが入るか調査したいとき、nullについては個別に調査しなくてはなりません。
解決策はないかと調べてみたところ、SELECT COUNT(*)だとnullもカウントしてくれるそうなので、試してみました。
SELECT COUNT(*) FROM (SELECT COL_A FROM TABLE_A GROUP BY COL_A);
これで、先程のデータであれば4を取得することができました。
少しずーつ、詳しくなっていきます。