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

MySQLでNULL以外(NOT NULL)の値をカウントする方法

MySQLでNULL以外の値がいくつ存在するかを調べたい場合は、集計関数 COUNT(カラム名) を使用します。COUNT関数は指定したカラムの値がNULLでない行のみを数えるため、NULL値は自動的に除外されます。

ここでは、実際にテーブルを作成して動作を確認してみましょう。

サンプルテーブルの作成

まず、以下のようにテーブルを作成します。

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    NumberOfQuestion int,
    NumberOfSolution int
    );
Query OK, 0 rows affected (0.20 sec)

テストデータの挿入

次に、INSERT文を使ってレコードを挿入します。意図的にNULL値を含むデータも登録しておきます。

mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,10);
Query OK, 1 row affected (0.06 sec)

mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,2);
Query OK, 1 row affected (0.04 sec)

mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,NULL);
Query OK, 1 row affected (0.03 sec)

mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,NULL);
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(30,19);
Query OK, 1 row affected (0.04 sec)

mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(30,1);
Query OK, 1 row affected (0.04 sec)

登録データの確認

SELECT文ですべてのレコードを表示して確認します。

mysql> select *from DemoTable;

実行結果は以下のとおりです。NumberOfSolutionカラムにはNULL値が2件含まれていることがわかります。

+----+------------------+------------------+
| Id | NumberOfQuestion | NumberOfSolution |
+----+------------------+------------------+
| 1  | 20               | 10               |
| 2  | 20               | 2                |
| 3  | 20               | NULL             |
| 4  | 20               | NULL             |
| 5  | 30               | 19               |
| 6  | 30               | 1                |
+----+------------------+------------------+
6 rows in set (0.00 sec)

NULL以外の値をカウントするクエリ

以下のクエリでは、COUNT(NumberOfSolution) を使って値の存在件数を数えています。COUNT関数はNULL値をカウントしないため、結果にはNULL以外の行だけが反映されます。

mysql> SELECT NumberOfQuestion, COUNT(NumberOfSolution) as NumberOfRows FROM DemoTable GROUP BY NumberOfQuestion;

実行結果:

+------------------+--------------+
| NumberOfQuestion | NumberOfRows |
+------------------+--------------+
| 20               | 2            |
| 30               | 2            |
+------------------+--------------+
2 rows in set (0.00 sec)

結果の解説

NumberOfQuestionが「20」のグループには4件のレコードがありますが、そのうち2件はNumberOfSolutionがNULLのため、カウント結果は「2」となっています。同様に「30」のグループではNULLが含まれていないため、全2件がカウントされています。

このように、COUNT(カラム名) はNULLを除外してカウントしたい場合に非常に便利です。なお、NULLも含めてすべての行を数えたい場合は COUNT(*) を使うことで実現できます。用途に応じて使い分けるとよいでしょう。

  1. MySQLでNOT NULLの値に対して1を設定する方法(IF関数とIS NOT NULLの使い方)

    MySQLでNOT NULLの値に1を設定するにはMySQLでは、IS NOT NULL演算子とIF()関数を組み合わせることで、値がNULLでない場合に「1」、NULLの場合に「0」を返すことができます。データの存在チェックやフラグ管理など、さまざまな場面で活用できる便利なテクニックです。基本構文NOT NULLかどうかを判定して1を設定する基本構文は以下のとおりです。select if( is not NULL,1,0) as anyAliasName;実際に動作するクエリを見てみましょう。mysql> select if( is not NULL,1,0);このクエリを実行すると、

  2. MySQLの既存のカラムにNOT NULL制約を設定する方法

    MySQLですでに存在するカラムにNOT NULL制約を追加するには、ALTER TABLE文を使用します。この記事では、実際のSQL例を使いながら、NOT NULL制約の設定方法とその動作確認の手順をわかりやすく解説します。 1. テーブルの作成 まず、検証用のサンプルテーブルを作成します。 mysql> create table DemoTable1949 ( UserId int, UserName varchar(20) ); Query OK, 0 rows affected (0.00 sec) この時点では、UserNameカラムにはNUL