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

MySQLのCASE WHENステートメントで条件別のカウントを実行する方法

条件に応じてレコードをカウントしたい場合には、CASE WHENステートメントを活用すると便利です。この記事では、サンプルテーブルを作成し、SUM関数と組み合わせて条件別の件数を集計する手順を、実行結果つきでわかりやすく解説します。

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

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

mysql> create table DemoTable1910
    (
    FirstName varchar(20),
    Marks int
    );
Query OK, 0 rows affected (0.00 sec)

2. レコードの挿入

続いて、INSERT文を使ってサンプルデータを登録します。

mysql> insert into DemoTable1910 values('Chris',45);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1910 values('David',85);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1910 values('Chris',55);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1910 values('Chris',98);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1910 values('David',98);
Query OK, 1 row affected (0.00 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示して、データの中身を確認しておきましょう。

mysql> select * from DemoTable1910;

実行結果は以下の通りです。

+-----------+-------+
| FirstName | Marks |
+-----------+-------+
| Chris     |    45 |
| David     |    85 |
| Chris     |    55 |
| Chris     |    98 |
| David     |    98 |
+-----------+-------+
5 rows in set (0.00 sec)

4. CASE WHENで条件別にカウントする

ここからが本題です。ポイントは、CASE WHENで「条件に一致したら1、一致しなければ0」を返し、その結果をSUMで合計すること。こうすることで、条件に一致するレコード数を効率よくカウントできます。

mysql> select FirstName,
    sum(case when Marks=45 then 1 else 0 end),
    sum(case when Marks=98 then 1 else 0 end)
    from DemoTable1910
    group by FirstName;

実行結果は次のようになります。

+-----------+-------------------------------------------+-------------------------------------------+
| FirstName | sum(case when Marks=45 then 1 else 0 end) | sum(case when Marks=98 then 1 else 0 end) |
+-----------+-------------------------------------------+-------------------------------------------+
| Chris     |                                         1 |                                         1 |
| David     |                                         0 |                                         1 |
+-----------+-------------------------------------------+-------------------------------------------+
2 rows in set (0.00 sec)

結果の読み方とまとめ

この結果から、Chrisは「Marks=45」のレコードを1件、「Marks=98」のレコードを1件持っていることがわかります。一方、Davidは「Marks=45」のレコードが0件、「Marks=98」のレコードが1件です。

このようにCASE WHENSUM(またはCOUNT)を組み合わせれば、GROUP BYでグループ化した単位ごとに、複数条件の件数をたった1つのクエリでシンプルに集計できます。ピボット集計のような出力が必要な場面で非常に役立つテクニックなので、ぜひ覚えておきましょう。

  1. MySQLのCASEステートメントでWHEN句を使う方法を実例付きで解説

    MySQLのCASEステートメントとWHEN句とはMySQLにおけるCASEステートメントは、条件に応じて異なる値を返すための強力な機能です。WHEN句と組み合わせることで、複数の条件分岐をSQLクエリ内で柔軟に処理できます。例えば、点数に応じて評価ラベルを付けたり、特定の値を別の表示内容に変換したりする際に非常に便利です。CASE WHEN句の基本構文CASEステートメントとWHEN句を使用する際の基本構文は以下の通りです。SELECT *, CASE WHEN 条件1 THEN 返す値1 WHEN 条件2 THEN 返す値2 ...

  2. MySQLでCASE WHENの代わりに使えるIF()関数の使い方

    MySQLでCASE WHENの代わりにIF()関数を使う方法MySQLでは、CASE WHENの代わりにIF()関数を使うことができます。IF()関数は、条件が真の場合に2番目の引数を、偽の場合に3番目の引数を返すシンプルな条件分岐関数で、単純な分岐処理をより簡潔に記述できるのが特徴です。まずはサンプルテーブルを作成しましょう。mysql> create table DemoTable1593 -> ( -> PlayerScore int -> ); Query OK, 0 rows affected (0.44 sec)次に、insertコ