5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLのCOUNT文で意図した件数が取得できなかった

Posted at

ほんの少しハマったことを共有。
考えてみれば当たり前のことでしたが、COUNT文なんて間違いようがないだろうと思っているとドツボにハマります。

(DBはOracleで再現しましたがどのDBMSでも同様かなと思います。)

やりたかった事

nullのレコード件数を取得したかった。
例として以下のテーブルで、DATA2の列がnullのレコード件数を取得するということを考えます。

テーブル例

EXAMPLE_TABLE

ID DATA1 DATA2
1 a A
2 b null
3 c C

駄目だったSQL

bad.sql
select COUNT(DATA2) from EXAMPLE_TABLE where DATA2 is NULL; 

結果:0

正解SQL

こうあるべき

good.sql
select COUNT(ID) from EXAMPLE_TABLE where DATA2 is NULL;

結果:1

結論

COUNT文に指定したカラムがnullの場合はカウントされません!
教科書的に、「COUNT文にはキー項目や*、定数('x',1等)を指定しましょう」というのに従いましょう。
仕組みとしては、COUNT(NULL)と評価されて、NULLはいかなる真偽値検査もfalseとなるためCOUNTもされなくなります。
何の気なしに、where句で指定したカラム使っちゃえとしたのが間違いでした。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?