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

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

MySQLでNULL値を除外したうえで列の値をカウントしたい場合は、COUNT()関数を使用します。COUNT()関数は、指定した列のNULL以外の値だけを数えるという特性を持っています。ここでは、実際にテーブルを作成して動作を確認してみましょう。

サンプルテーブルの作成

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable
-> (
-> Name varchar(100),
-> CountryName varchar(100)
-> );
Query OK, 0 rows affected (0.49 sec)

レコードの挿入

次に、INSERT文を使っていくつかのレコードを挿入します。意図的にCountryNameがNULLのレコードも含めておきましょう。

mysql> insert into DemoTable values('John',null);
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values('Chris','US');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable values('Robert',null);
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('Bob','UK');
Query OK, 1 row affected (0.57 sec)

テーブルの内容を確認

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

mysql> select *from DemoTable;

出力結果

+--------+-------------+
| Name | CountryName |
+--------+-------------+
| John | NULL |
| Chris | US |
| Robert | NULL |
| Bob | UK |
+--------+-------------+
4 rows in set (0.00 sec)

NULLを無視してカウントするクエリ

COUNT()関数を使ってNULLを除外してカウントするクエリは以下のとおりです。COUNT()に列名を指定すると、その列のNULL以外の値のみがカウントされます。

mysql> select count(Name) AS TotalName,count(CountryName) AS CountryWhichIsNotNull from DemoTable;

出力結果

+-----------+-----------------------+
| TotalName | CountryWhichIsNotNull |
+-----------+-----------------------+
| 4 | 2 |
+-----------+-----------------------+
1 row in set (0.00 sec)

結果の解説

この実行結果から、次のことが読み取れます。

  • TotalName(4件):Name列にはNULLが存在しないため、全4行がカウントされています。
  • CountryWhichIsNotNull(2件):CountryName列にはNULLが2つ含まれているため、「US」と「UK」の2行のみがカウントされました。

なお、COUNT(*)を使用した場合はNULLの有無にかかわらずすべての行がカウントされます。NULLを除外して集計したいケースでは、必ずCOUNT(列名)の形式で指定することが重要なポイントです。

  1. 【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法

    特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows af

  2. MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法

    はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実