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

MySQLで2つの異なる列のNULL値のみをカウントし、1つのSELECT文で表示する方法

MySQLでは、IS NULL演算子を使用することでNULL値を判定できます。本記事では、テーブル内の2つの異なる列に含まれるNULL値をそれぞれカウントし、1つのSELECT文で同時に表示する方法を解説します。

1. サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable
-> (
-> Number1 int,
-> Number2 int
-> );
Query OK, 0 rows affected (0.62 sec)

2. テストデータの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。意図的にNULL値を含むデータを混ぜています。

mysql> insert into DemoTable values(1,NULL);
Query OK, 1 row affected (0.20 sec)

mysql> insert into DemoTable values(NULL,NULL);
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable values(3,NULL);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(NULL,90);
Query OK, 1 row affected (0.11 sec)

3. テーブル内の全レコードを確認

SELECT文でテーブルの中身を確認してみます。

mysql> select *from DemoTable;

出力結果

+---------+---------+
| Number1 | Number2 |
+---------+---------+
| 1 | NULL |
| NULL | NULL |
| 3 | NULL |
| NULL | 90 |
+---------+---------+
4 rows in set (0.00 sec)

この時点で、Number1列にはNULLが2件、Number2列にはNULLが3件存在することがわかります。

4. 2つの列のNULL値を1つのSELECT文でカウントする

ここからが本題です。サブクエリ(スカラーサブクエリ)を利用することで、複数の列ごとのNULL件数を1つのSELECT文でまとめて取得できます。

mysql> select
-> (select count(*) from DemoTable where Number1 is null) as FirstColumnNullValue,
-> (select count(*) from DemoTable where Number2 is null) as SecondColumnNullValue
-> ;

このクエリでは、各サブクエリがIS NULL条件に一致する行数をcount(*)で集計し、それぞれ別名(エイリアス)をつけて1行の結果として返します。

出力結果

+----------------------+-----------------------+
| FirstColumnNullValue | SecondColumnNullValue |
+----------------------+-----------------------+
| 2 | 3 |
+----------------------+-----------------------+
1 row in set (0.00 sec)

補足:COUNT(列名)との違い

なお、COUNT(Number1)のように引数に列名を指定した場合、COUNT関数はNULL値を自動的に除外して集計します。そのため「NULL以外の値の件数」を求めることになります。NULLの件数そのものを知りたい場合は、この記事のようにWHERE句とIS NULLを組み合わせたcount(*)を使うのが確実です。

まとめ

  • NULL値の判定にはIS NULLを使用する。
  • スカラーサブクエリを複数並べることで、複数列のNULL件数を1つのSELECT文で同時に取得できる。
  • COUNT(列名)はNULLを無視するため、NULL件数のカウントには注意が必要。
  1. MySQLでハイフン区切りの文字列値を1つの列から複数の列に分離して選択する方法

    ハイフンで区切られた文字列値を1つの列から複数の列に分離して取得したい場合、MySQLの SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。ここでは、サンプルテーブルを使って具体的な手順を解説します。 サンプルテーブルの作成 まず、従業員情報を格納するテーブルを作成します。 mysql> create table DemoTable1962 ( EmployeeInformation text ); Query OK, 0 rows affected (0.00 sec) データの挿入 次に、INSERT文を使って「ID-名前-年齢」の形

  2. MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法

    MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975     (     StudentNa