条件分岐でデータを取得するSQLの書き方~select case~

MySQL

条件分岐でデータを取得する方法について紹介していきます

条件分岐の書き方(case)

条件分岐の主な構文は以下の3種類

構文①
条件を一つ指定する

case
  when 条件式 thenend




構文②
不一致の時の処理を指定

case
  when 条件式 thenelseend


構文③
複数条件を指定する

case
  when 条件式 thenwhen 条件式 thenelseend

構文① 条件を一つ指定する

構文①は条件を一つだけ指定する書き方です。

case
  when x >= 5 then 
  'A'
end

xが5以上であれば’A’となる条件式です。条件に一致しない場合は何も処理されず条件分岐は終了します。

構文② 条件に一致しない時の処理

構文②は条件に一致しない場合に処理を実行する書き方になります。

case
  when x >= 5 then 
  'A'
  else
  'B'
end

xが5以上であれば’A’、条件に一致しない場合には’B’となります。

構文③ 複数条件を指定する

構文③は複数の条件をしていする書き方になります。

条件は複数記述することができるので以下の例では二つ条件を指定していますが、3つ以上指定することもできます。

case
  when x >= 5 then 
  'A'
  when x <= 3 then 
  'B'
  else
  'C'
end

xが5以上であれば’A’、3以下であれば’B’、どちらにも該当しない場合には’C’になります。

Point!
  • case式は最初に条件に一致した処理のみ実行される
  • case式の末尾にある『end』は省略できない

case式を使用したサンプルコード

実際にcase式を利用してデータを取得していきます

前提条件

使用するテーブル:USERSテーブル

+----+-----------+------+
| id | last_name | age  |
+----+-----------+------+
|  1 | 柴犬      |    7 |
|  2 | コーギー  |    8 |
|  3 | ダックス  |   10 |
|  4 | パグ      |    3 |
|  5 | シーズー  |   17 |
|  6 | 秋田犬    |   12 |
+----+-----------+------+
6 rows in set (0.000 sec)

条件

  • 前述した構文③を例にします
  • USERSテーブルから取得するカラムは上記の3つのカラム
  • case式で条件分岐して作成するカラムは『classification』

構文と実行結果

使用するSQL

select id,last_name,age,
case 
when age>=10 then 'お年寄り' 
when age> 5 then '中年' 
else '若者' 
end  classification  
from users  order by age;

今回のcase式の条件は以下の通りです

ユーザーの年齢が10歳以上なら’お年寄り’
5歳以上なら’中年’
それ以外は若者

分類したらそのカラム名を『 classification 』としています。

年齢で昇順に並び替えもしています。

出力結果

+----+-----------+------+----------------+
| id | last_name | age  | classification |
+----+-----------+------+----------------+
|  4 | パグ      |    3 | 若者           |
|  1 | 柴犬      |    7 | 中年           |
|  2 | コーギー  |    8 | 中年           |
|  3 | ダックス  |   10 | お年寄り       |
|  6 | 秋田犬    |   12 | お年寄り       |
|  5 | シーズー  |   17 | お年寄り       |
+----+-----------+------+----------------+
6 rows in set (0.001 sec)

指定した通り分類することができました

タイトルとURLをコピーしました