[MySQL]count()で集計する時nullも''(ブランク)もカウントから除外する方法

Read More


通常、指定したカラムの数を取りたい場合は以下のように指定する。

■通常のカウント
SELECT
  COUNT(column_name) AS cnt
FROM
  table_name
GROUP BY
  group_name
※column_name、table_name、group_nameは適当に読み替えること

これが基本系。
ただこれだとカラムの中身がnullのものはカウントされない。

中身がnullであってもカウントしたい場合は以下のように書く。

■nullを含めたカウント
SELECT
  COUNT(column_name OR null) AS cnt
FROM
  table_name
GROUP BY
  group_name

これでnullであってもカウントされるようになる。


今度は値が''(ブランク)のものをカウントから除外したいような場合。
ややこしいのでここではっきりと書いておくがこの方法だとnullはカウントされる
nullも''も含めない方法はこのSQLの次。

■''(ブランク)を除外したカウント(nullは含まれる)
SELECT
  COUNT(IF(column_name='', null, 1)) AS cnt
FROM
  table_name
GROUP BY
  group_name




さてようやく本題。
nullも''(ブランク)もカウントから除外させる方法は以下の通り。

■nullと''(ブランク)を除外したカウント
SELECT
  COUNT(IF(column_name='' OR column_name is null, null, 1)) AS cnt
FROM
  table_name
GROUP BY
  group_name





使いどころはそれなりに