条件分岐でデータを取得する方法について紹介していきます
条件分岐の書き方(case)
条件分岐の主な構文は以下の3種類
構文①
条件を一つ指定する
case
when 条件式 then
値
end
構文②
不一致の時の処理を指定
case
when 条件式 then
値
else
値
end
構文③
複数条件を指定する
case
when 条件式 then
値
when 条件式 then
値
else
値
end
構文① 条件を一つ指定する
構文①は条件を一つだけ指定する書き方です。
例
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)
指定した通り分類することができました