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