やりたかったこと
カラムの値別のレコード件数を知りたい
データ
| id | pref_id |
|---|---|
| 100000 | 27 |
| 138659 | NULL |
| 200000 | 13 |
| 262241 | NULL |
| 268371 | NULL |
| 269365 | NULL |
| 300000 | 13 |
期待していた結果
| pref_id | cnt |
|---|---|
| 13 | 2 |
| 27 | 1 |
| NULL | 4 |
ここで、つまづいた
mysql> select pref_id, count(pref_id) as cnt from dtb_customer group by pref_id;
+---------+-------+
| pref_id | cnt |
+---------+-------+
| 13 | 2 |
| 27 | 1 |
| NULL | 0 |
カラムの値がNULLであるレコード件数がゼロで返ってきた
解決
mysql> select pref_id, count(*) as cnt from dtb_customer group by pref_id;
+---------+-------+
| pref_id | cnt |
+---------+-------+
| 13 | 2 |
| 27 | 1 |
| NULL | 4 |
集計関数countにカラムを指定せず、レコード全体を指定すると
NULLレコードをカウントしてくれた
環境
MySQL 5.7.27