SQLでSELECT句のCOUNTをきわめる【複数の条件指定も可能】
「SQLのCOUNTは意外と使える」

今回はつぎの3パターンでCOUNTをきわめていこう。

  • 基本的なCOUNT
  • 条件を指定してCOUNT
  • 複数条件を指定してCOUNT

COUNTするデータの準備

今回はつぎのデータを使ってCOUNT集計をしていく。

・テーブル名はschool_class

nameclass_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句を指定する必要ないから、違うパターンで集計したい場合はかなり使えるはずだ。