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(*) を使うことで実現できます。用途に応じて使い分けるとよいでしょう。
-
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);このクエリを実行すると、
-
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