プログラミングをするにあたって条件分岐は重要であり、極めるとやりたい事の幅がグッと広がります。
SQLにも条件分岐があります。CASEとWHENとTHENを使用します。updateなどでもcaseは使われます。
実際にSQLでCASEとWHENとTHENを使用して結果をみてみましょう。
またよくあるエラーなども一緒にご紹介します。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
SQLでCASEとWHENとTHENを使用して分岐する
SQLでCASEを使用して条件分岐する時の基礎構文は以下となります。
CASE WHEN 評価 THEN 式
WHEN 評価 THEN 式
WHEN 評価 THEN 式
・
・
ELSE 式
END
SQLのCASEを使用する時の決まりはあまりなく、どこにも記述できる事が強みです。
WHENの後に評価式をもってきて該当すればTHEN以降の式が返されます。
どれにも当てはまらない場合はELSEの後の式が返されます。
終了時にはENDを入れる(必須項目)
SQLでCASEやWHENやTHENを使用してみる
では実際にSQLでCASEを使用します。
使用用途としてSELECT文の結果を柔軟に表示変えする事が多いです。
実際にSQLを実行する環境説明
以下のSQLテーブルがあるとします。
GROUP BY句にてグルーピングして点数の合計を出す
チーム別の合計値を表示してみます。
以下のSQL文を見て下さい。
※GROUP BY句にてグルーピングして点数の合計を出すSQL
SELECT `チーム名`,SUM(`点数`) FROM `点数` GROUP BY `チーム名`;
結果は以下になります。
CASEにてグルーピングして点数の合計を出す
この結果ですがチーム名をカラムへ、合計点数をレコードに入れ替えしてみます。
以下のCASEのSQL文を見てください。
SELECT SUM(CASE WHEN `チーム名` = 'チームA' THEN `点数` ELSE 0 END) 'チームAの点数',
SUM(CASE WHEN `チーム名` = 'チームB' THEN `点数` ELSE 0 END) 'チームBの点数',
SUM(CASE WHEN `チーム名` = 'チームC' THEN `点数` ELSE 0 END) 'チームCの点数'
FROM `点数`;
CASEにてグルーピングして点数の合計を出すSQLの説明
今回は集約関数の中にCASEを指定して、チーム別にグルーピングしています。
判別式でチーム名のカラムが〇〇のときに点数を合計、当てはまらなければ0を指定しています。
このSQLを実行してみます。
普通にグルーピングした結果の縦横を変換して表示できています。
このようにSELECT文を自分の行いたい表示に変更する時にCASEを使用します。
SQLでCASEのよくあるエラー
SQLのCASEを使用する時のよくあるエラーは様々あります。
その中でも一番多いのは最後の「END」を忘れる事です。
先程のSQL文で最後の「END」を消して実行してみましょう!
※エラーが出るSQL構文
SELECT SUM(CASE WHEN `チーム名` = 'チームA' THEN `点数` ELSE 0) 'チームAの点数',
SUM(CASE WHEN `チーム名` = 'チームB' THEN `点数` ELSE 0) 'チームBの点数',
SUM(CASE WHEN `チーム名` = 'チームC' THEN `点数` ELSE 0) 'チームCの点数'
FROM `点数`;
上のSQLを実行してみましょう!
#1064 - SQL構文エラーです。バージョンに対応するマニュアルを参照して正しい構文を確認してください。 : ') 'チームAの点数',
SUM(CASE WHEN `チーム名` = 'チームB'...' 付近 1 行目
このようなエラーメッセージが出ました!
このようなメッセージが出た時は最後の「END」を確認して見て下さい。
SQLでCASEとWHENとTHENを使用して分岐するのまとめ
SQLでCASEを使用して条件分岐する時の基礎構文は以下となります。
CASE WHEN 評価 THEN 式
WHEN 評価 THEN 式
WHEN 評価 THEN 式
・
・
ELSE 式
END
SQLのCASEを使用する時の決まりはあまりなく、どこにも記述できる事が強みです。
終了時にはENDを入れる(必須項目)
SELECT文を自分の行いたい表示に変更する時にCASEを使用します。