「SQLのCOUNTは意外と使える」
今回はつぎの3パターンでCOUNTをきわめていこう。
- 基本的なCOUNT
- 条件を指定してCOUNT
- 複数条件を指定してCOUNT
COUNTするデータの準備
今回はつぎのデータを使ってCOUNT集計をしていく。
・テーブル名はschool_class
name | class_room |
佐藤 | クラス1-1 |
田中 | クラス1-2 |
伊藤 | クラス1-2 |
森 | クラス1-3 |
鈴木 | クラス1-1 |
基本的なCOUNT
SELECT COUNT(*) FROM school_class; # 結果は5
まずは通常のカウント。これはすべてのレコードをカウントして結果を表示する。
この方法はNULL値でもカウントするから注意しておこう。
つぎは条件を入れてカウントする方法を紹介していく。
条件を指定してCOUNT
SELECT COUNT(class_room = 'クラス1-1' OR NULL) FROM school_class; # 結果は2
上記のSQLはclass_room内の「クラス1-1」だけをカウントする。
OR NULLを入れないと結果がすべてのカウント(今回は5)になるから注意しよう。
ただNULL値はカウントされない。
ちなみに、違う条件のカウントを一気に取得することもできる。つぎのように。
SELECT COUNT(class_room = 'クラス1-1' OR NULL) AS クラス1, COUNT(class_room = 'クラス1-3' OR NULL) AS クラス3 FROM school_class; # 結果はクラス1が2, クラス3が1
つぎは複数条件でカウントする方法を紹介していこう。
複数条件を指定してCOUNT
SELECT COUNT(class_room IN ('クラス1-1', 'クラス1-3') OR NULL) FROM school_class; # 結果は3
上記のSQLはclass_room内の「クラス1-1」「クラス1-3」だけをカウントする。
これはIN句を使えば複数の条件を設定できるようになる。
簡単にいえばWHERE句で使ってる条件をそのままCOUNTに適用可能。
つぎのようにNOTを使ってカウントもできるし。
SELECT COUNT(NOT class_room IN ('クラス1-1', 'クラス1-3') OR NULL) FROM school_class; # 結果は2
他のカラムも条件にいれてカウントできる。
SELECT COUNT(name = '佐藤' AND class_room = 'クラス1-1' OR NULL) FROM school_class; # 結果は1
まとめ: COUNTをうまく使ってSQLで集計してみよう
- 基本的なCOUNT
- 条件を指定してCOUNT
- 複数条件を指定してCOUNT
この3つを使ってうまくSQLでカウントしてみよう。
わざわざWHERE句を指定する必要ないから、違うパターンで集計したい場合はかなり使えるはずだ。