SQL|SELECT CASE WHEN ..句の使い方 | 条件で評価

SQL

SQLのSelect case whenを調べる人

SQLを調べる人
「条件を指定して、SQLでテーブルの値を評価したいです。SELECT CASE WHEN句をどのように指定すれば良いでしょう。」

こんな疑問に答えます。

結論から言うと、構文は以下の通りです。

[構文]

SELECT [カラム],
  CASE
    WHEN [条件] THEN [文字列1]
    ELSE [文字列2]
  END
FROM [テーブル名];

以下では、リンゴとオレンジとバナナのデータを使って解説します。

本記事の内容

事前準備

SELECT CASE WHEN..句を使う準備

テスト用のテーブルを作成します。

CREATE TABLE test (id INTEGER NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,price INTEGER NOT NULL, PRIMARY KEY(id));

データは、果物とその価格を登録します。

INSERT INTO test (name,price) VALUES('Apple',150);
INSERT INTO test (name,price) VALUES('Apple',120);
INSERT INTO test (name,price) VALUES('Orange',120);
INSERT INTO test (name,price) VALUES('Orange',200);
INSERT INTO test (name,price) VALUES('Banana',150);
INSERT INTO test (name,price) VALUES('Banana',120);

このテーブルを使って解説します。
[実行結果]

+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  1 | Apple  |   150 |
|  2 | Apple  |   120 |
|  3 | Orange |   120 |
|  4 | Orange |   200 |
|  5 | Banana |   150 |
|  6 | Banana |   120 |
+----+--------+-------+

SELECT CASE WHEN..句を使った例

SELECT CASE WHEN..句を使った例

以下にCASE文を使った具体的な例を示します。

SELECT name,price,
 CASE
  WHEN 150 > price THEN "good"
  ELSE "bad"
 END
FROM test;

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

+--------+-------+----------+
| Apple  |   150 | bad      |
| Apple  |   120 | good     |
| Orange |   120 | good     |
| Orange |   200 | bad      |
| Banana |   150 | bad      |
| Banana |   120 | good     |
+--------+-------+----------+

SELECT CASE WHENで複数の条件を評価する

条件を評価するWHENは複数記載することもできます。

SELECT [カラム],
  CASE
    WHEN [条件] THEN [文字列1]
    WHEN [条件] THEN [文字列2]
    WHEN [条件] THEN [文字列3]
….
    ELSE [文字列N]
  END
FROM [テーブル名];

以下に複数のWHEN句を使った具体的な例を示します。

SELECT name,price,
 CASE
  WHEN 120 >= price THEN "good"
  WHEN 150 >= price THEN "soso"
  ELSE "bad"
 END
FROM test;

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

+--------+-------+----------+
| Apple  |   150 | soso      |
| Apple  |   120 | good     |
| Orange |   120 | good     |
| Orange |   200 | bad      |
| Banana |   150 | soso      |
| Banana |   120 | good     |
+--------+-------+----------+

ここでポイントは、1つ目のWHEN句に入った場合、2つ目のWHEN句を評価しません。
上から下に向かってパターンマッチしていくイメージです。

そのため、この例ですと1つ目のWHEN句と2つ目のWHEN句の順番を逆に書いてしまうと、1つ目にマッチしてしまい、2つ目が機能しませんので注意が必要です。

今回は以上です。

本記事の内容は、実際に手を動かしてみることをオススメします。

コピペで簡単に実行できますのでぜひ試して下さい。

最後に構文をおさらい

[構文]

SELECT [カラム],
  CASE
    WHEN [条件] THEN [文字列1]
    ELSE [文字列2]
  END
FROM [テーブル名];