まずは、CASE式を使ってレベルごとに初級者・上級者としてグループ分けを行っていきます。
ここでは、レベルが3以上のユーザーを上級者、それ未満のユーザーを初級者としてグループ分けを行います。
SQLはこのように記述します。
SELECT
userID,
level,
CASE
WHEN level >= 3 THEN '上級者'
ELSE '初級者'
END AS クラス
FROM
users;
usersテーブルからuserIDとlevelを取り出し、CASE式を使って条件分岐を行い、levelが3以上なら上級者、それ以外を初級者として表示しています。
このSQLを実行すると、
このように、初級者と上級者でグループ分けをすることができました。
また、CASE式の中で条件を提示しているWHENの行には、いくつでも条件を追加することができます。
例えば、レベルが5以上のユーザーを上級者、レベルが3以上のユーザーは中級者、それ以外のユーザーを初級者としてグループ分けしてみます。
SQLはこのように記述します。
SELECT
userID,
level,
CASE
WHEN level >= 5 THEN '上級者'
WHEN level >= 3 THEN '中級者'
ELSE '初級者'
END AS クラス
FROM
users;
このSQLを実行すると、
このように、初級者・中級者・上級者の3パターンでグループ分けすることができました。
なお、このCASE式を使った条件分岐の記述では順番に注意すべき点があります。
例えば、上記のSQL文で条件を指定する際に
SELECT
userID,
level,
CASE
WHEN level >= 3 THEN '中級者'
WHEN level >= 5 THEN '上級者'
ELSE '初級者'
END AS クラス
FROM
users;
このように、WHEN level >= 3 THEN '中級者'を上にして書くと、
このように、上級者が表示されなくなってしまいます。
これはCASE式の特徴として、上のWHENの条件で検索し、全てヒットした場合に、下のWHENの条件はスキップされてしまうからです。
levelが3以上のユーザーは全て中級者であると検索結果で全てヒットしたので、残りの条件はスキップされて初級者と中級者のみが表示されてしまいます。
CASE式を使う際は、このような事にも注意しなければなりません。