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

MySQLのCASEステートメントで列データを活用する方法をわかりやすく解説

MySQLのCASEステートメント内で列データを使用する方法

MySQLのCASEステートメントは、SELECT句の中で条件分岐を行い、集計処理に活用できる非常に便利な機能です。ここでは、実際のテーブルデータを使いながら、CASEステートメント内で列(カラム)データをどのように利用できるのかを解説します。

サンプルデータ:Studentsテーブル

まず、以下のような「Students」テーブルのデータを例として考えてみましょう。

mysql> Select * from Students;
+----+-----------+-----------+----------+----------------+
| id | Name      | Country   | Language | Course         |
+----+-----------+-----------+----------+----------------+
| 1  | Francis   | UK        | English  | Literature     |
| 2  | Rick      | USA       | English  | History        |
| 3  | Correy    | USA       | English  | Computers      |
| 4  | Shane     | France    | French   | Computers      |
| 5  | Validimir | Russia    | Russian  | Computers      |
| 6  | Steve     | Australia | English  | Geoinformatics |
| 7  | Rahul     | India     | Hindi    | Yoga           |
| 8  | Harshit   | India     | Hindi    | Computers      |
| 9  | Harry     | NZ        | English  | Electronics    |
+----+-----------+-----------+----------+----------------+
9 rows in set (0.00 sec)

CASEステートメントを使った国別の学生数集計

このテーブルから「USA・UK・NZ・INDIA・RUSSIA・FRANCE」など、各国に何人の学生が所属しているかを知りたいとします。そんなときは、country列をCASEステートメントの中で使用し、SUM関数と組み合わせることで簡単に集計できます。

具体的には、「条件に一致すれば1、一致しなければ0」を返すCASE式を作成し、その合計値を求めることで、各条件に該当する行数をカウントします。

mysql> Select SUM(CASE WHEN country = 'USA' THEN 1 ELSE 0 END) AS USA,
-> SUM(CASE WHEN country = 'UK' THEN 1 ELSE 0 END) AS UK,
-> SUM(CASE WHEN country = 'INDIA' THEN 1 ELSE 0 END) AS INDIA,
-> SUM(CASE WHEN country = 'Russia' THEN 1 ELSE 0 END) AS Russia,
-> SUM(CASE WHEN country = 'France' THEN 1 ELSE 0 END) AS France,
-> SUM(CASE WHEN country = 'NZ' THEN 1 ELSE 0 END) AS NZ,
-> SUM(CASE WHEN country = 'Australia' THEN 1 ELSE 0 END) AS Australia
-> From Students;
+------+------+-------+--------+--------+------+-----------+
| USA  | UK   | INDIA | Russia | France | NZ   | Australia |
+------+------+-------+--------+--------+------+-----------+
| 2    | 1    | 2     | 1      | 1      | 1    | 1         |
+------+------+-------+--------+--------+------+-----------+
1 row in set (0.07 sec)

クエリのポイント

  • CASE WHEN country = '国名' THEN 1 ELSE 0 END:指定した国と一致する行には1、それ以外には0を返します。
  • SUM関数:CASE式の結果(1と0)を合計することで、該当する学生の人数を算出しています。
  • ASエイリアス:結果セットの列見出しを国名で表示するために使用しています。

このように、CASEステートメント内で列データを参照することで、ピボットテーブルのようなクロス集計をSQLだけで実現できます。GROUP BYと組み合わせれば、さらに柔軟な分析も可能になるので、ぜひ活用してみてください。

  1. MySQLで特定のカラムのデータをエクスポートする方法(INTO OUTFILEの使い方)

    MySQLで特定のカラムのデータをエクスポートする方法 MySQLでテーブルから特定のカラム(列)のデータだけをファイルに書き出したい場合は、SELECT文とINTO OUTFILEを組み合わせるのが最もシンプルで確実な方法です。この記事では、実際にテーブルを作成し、データを投入したうえで、特定のカラムをテキストファイルへエクスポートする手順を順番に解説します。 基本構文 特定のカラムをファイルに出力する際の基本構文は次のとおりです。 select yourColumnName from yourTableName into outfile yourLocationOfFile; このように

  2. MySQLでテーブルのすべての列を削除する方法|DROP TABLEコマンドの使い方を解説

    MySQLでテーブル内の全カラムを削除するには?MySQLでは、テーブルに存在するすべてのカラム(列)を1つずつ削除していくことはできません。すべての列を削除したい場合、つまりテーブル自体をデータベースから取り除きたい場合は、DROP TABLE コマンドを使用します。DROP TABLEの基本構文DROP TABLE テーブル名;このコマンドを実行すると、指定したテーブルとその中のすべてのデータ・構造が完全に削除されます。なお、この操作は元に戻せないため、実行前には必ず内容を確認してください。実際に試してみよう:サンプルテーブルの作成まずは動作を確認するために、以下のようにサンプルテーブルを