MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法
MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。
1. サンプルテーブルの作成
まず、学生名と点数を格納するテーブルを作成します。
mysql> create table DemoTable1975 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affected (0.00 sec)
2. レコードの挿入
INSERTコマンドを使って、テーブルにデータを登録します。意図的にNULLを含むレコードも挿入している点に注目してください。
mysql> insert into DemoTable1975 values('John',45);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1975 values('Chris',67);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1975 values('David',59);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1975 values('Bob',NULL);
Query OK, 1 row affected (0.00 sec)
3. テーブルの内容を確認する
SELECT文で、テーブル内のすべてのレコードを表示します。
mysql> select * from DemoTable1975;
実行結果は以下の通りです。
+-------------+--------------+ | StudentName | StudentMarks | +-------------+--------------+ | John | 45 | | Chris | 67 | | David | 59 | | Bob | NULL | +-------------+--------------+ 4 rows in set (0.00 sec)
4. 2つの列の値をカウントするクエリ
すべての列値をカウントするには、各列に対するCOUNT関数の結果を「+」演算子で足し合わせます。
mysql> select count(StudentName)+count(StudentMarks) from DemoTable1975;
実行結果:
+----------------------------------------+ | count(StudentName)+count(StudentMarks) | +----------------------------------------+ | 7 | +----------------------------------------+ 1 row in set (0.00 sec)
結果の解説:なぜ7になるのか
テーブルには4件のレコードが存在しますが、結果は「7」となりました。その理由は以下の通りです。
- count(StudentName): 4件(すべての名前がNULL以外のため全件カウントされる)
- count(StudentMarks): 3件(Bobの点数がNULLのため除外される)
つまり、4 + 3 = 7 という計算になります。COUNT関数は指定した列がNULLである行をカウントしないため、NULL値は自動的に合計カウントから除外されます。これにより、実際にデータが存在する値だけを正確に集計できます。
まとめ
複数列の合計カウントを取得したい場合は、COUNT(列名1)+COUNT(列名2) の形式で記述します。COUNT関数がNULLを除外する仕様を理解しておけば、欠損データを含むテーブルでも正確な集計が可能になります。
-
MySQLでNULLを含む列同士を連結する方法:IFNULL()を使った安全な文字列結合
MySQLでNULL値を含む列を連結するには? MySQLで複数の列を連結する際、対象の列にNULLが含まれていると、CONCAT()関数の結果全体がNULLになってしまうという問題があります。これを回避するためには、IFNULL()関数を活用するのが効果的です。 この記事では、実際にテーブルを作成し、NULLを含むデータを連結する手順を具体的な例とともに解説します。 1. サンプルテーブルを作成する まず、学生の名前(姓・名)を格納するテーブルを作成しましょう。 mysql> create table DemoTable1793 ( StudentFirstName
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(