LoginSignup
57
43

More than 5 years have passed since last update.

【SQL】COUNT関数で条件に合致する件数を取得する

Posted at

SELECTで取得したレコードの件数を取得するCOUNT関数。
特定の条件に合致するレコード数を集計したい時に少し難解な書き方をします。

テーブル

サンプルで使用するテーブルです。

名前 性別
田中
山田
佐藤
鈴木
武田
山本

SQL

SELECT COUNT(性別= OR NULL) AS 男の数
, COUNT(性別= OR NULL) AS 女の数
FROM テーブル

処理の仕組み

上のSQL、OR NULLって必要?と思いますよね?

PostgreSQLの公式ドキュメントを見ると、下記の記載があります。

count(expression) : expressionが非NULL値を持つ入力値の個数

ですので、上記SQLの性別=男 OR NULLの部分が性別=男だと、性別=男のレコードはTRUE、性別=女のレコードはFALSEとなり、全レコードが非NULL値を持つ入力値としてカウントされます。

OR NULLを付けることによって、性別=男のレコードはTRUE OR NULLでTRUEとなり、性別=女のレコードはFALSE OR NULLでNULLとなり、意図した通りの集計結果となります。

余談

ちなみに、BOOL値とNULLの論理演算の結果は以下の通りです。
TRUE AND NULL → NULL
TRUE OR NULL → TRUE
FALSE AND NULL → FALSE
FALSE OR NULL → NULL

57
43
2

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
57
43