MySQLのCOUNT()関数はNULL値を含む列に対して何を返す?NULLの扱いを解説
MySQLのCOUNT()関数とNULL値の関係
MySQLのCOUNT()関数を使って特定の列の値をカウントする際、その列にNULL値が含まれている場合、MySQLはNULLを無視し、NULL以外の値(非NULL値)のみを対象にカウント結果を返します。
この動作を理解するために、以下のようなデータを持つ「Employee」テーブルを使用して確認してみましょう。
サンプルデータの確認
mysql> Select * from Employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000 | | 3 | Advik | 25000 | | 4 | Aarav | 65000 | | 5 | Ram | 20000 | | 6 | Mohan | 30000 | | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+--------+--------+ 8 rows in set (0.00 sec)
上記のテーブルには合計8件のレコードが登録されていますが、「Salary」列にはIDが7と8のレコードにNULL値が格納されていることがわかります。
COUNT()関数でSalary列をカウントする
それでは、「Salary」列に対してCOUNT()関数を適用してみます。
mysql> Select COUNT(salary) from Employee; +---------------+ | COUNT(salary) | +---------------+ | 6 | +---------------+ 1 row in set (0.15 sec)
結果の解釈
テーブル全体のレコード数は8件ですが、クエリの実行結果として返されたのは「6」という値です。これは、NULL値が格納されている2件のレコードがカウントから除外され、NULL以外の値を持つ6件のみが集計されたことを意味します。
この結果から、MySQLのCOUNT()関数はNULL値を自動的に無視し、非NULL値のみをカウント対象とすることが明確にわかります。
補足:全レコード数を取得したい場合
なお、NULL値も含めたテーブル内の全レコード数を取得したい場合は、COUNT(*)を使用します。COUNT(列名)はその列がNULLでない行だけを数えるのに対し、COUNT(*)は行全体を対象とするため、NULLの有無に関係なくすべてのレコードがカウントされます。用途に応じて使い分けることが重要です。
-
MySQLでNULL値をカウントする方法を実例付きでわかりやすく解説
MySQLでNULL値をカウントする方法 MySQLでテーブル内のNULL値の件数を調べるには、CASE文とSUM関数を組み合わせるのが一般的です。COUNT関数はNULLを除外して数えてしまうため、NULLを正しくカウントしたい場合にはこの方法が有効です。 まず、動作確認用のサンプルテーブルを作成しましょう。 mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName varchar(20) ); Query OK, 0 rows affected (0.77
-
MySQLの単一クエリでNULLを無視して列の値をカウントする方法
MySQLでNULL値を除外したうえで列の値をカウントしたい場合は、COUNT()関数を使用します。COUNT()関数は、指定した列のNULL以外の値だけを数えるという特性を持っています。ここでは、実際にテーブルを作成して動作を確認してみましょう。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(100), -> CountryName varchar(100) -> );Query OK, 0 rows affected