MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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の有無に関係なくすべてのレコードがカウントされます。用途に応じて使い分けることが重要です。

  1. 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

  2. MySQLの単一クエリでNULLを無視して列の値をカウントする方法

    MySQLでNULL値を除外したうえで列の値をカウントしたい場合は、COUNT()関数を使用します。COUNT()関数は、指定した列のNULL以外の値だけを数えるという特性を持っています。ここでは、実際にテーブルを作成して動作を確認してみましょう。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(100), -> CountryName varchar(100) -> );Query OK, 0 rows affected