SQLのCASE式とは
「条件に応じて別の値を付けられないか、、?」
本記事を見に来ていただいた方は、そのようなお悩みをお持ちではないでしょうか。
それを解決できるのがCASE式です。SQLのCASE式ではSELECT文やWHERE句で条件分岐ができます。
例えば、年齢10~19の数値を’10代’と返すことができます。分析やデータパイプラインで利用するケースも多くあります。
本記事では、そちらについて解説いたします!
通常のCASE式について
CASE式の基本構文
SQLのCASE式は、条件に基づいて異なる結果を返すために使用されます。
通常、SELECT文やWHERE句などのSQL文内で使用されます。
基本的な構文は次のとおりです。
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
...
ELSE デフォルト結果
END
CASE式は、最初の条件から順番に評価され、最初に一致した条件の結果が返されます。ELSE句を指定することで、いずれの条件にも一致しなかった場合のデフォルトの結果を指定することもできます。
CASE式の使用例
以下にいくつかの例を示します。
例1: 条件に基づいて異なる結果を返す場合
SELECT 列名,
CASE
WHEN 列名 = '値1' THEN '結果1'
WHEN 列名 = '値2' THEN '結果2'
ELSE 'デフォルト結果'
END AS 新しい列名
FROM テーブル名
例2: 条件に基づいて集計結果を返す場合
SELECT 列名,
SUM(CASE
WHEN 列名 = '値1' THEN 1
WHEN 列名 = '値2' THEN 2
ELSE 0
END) AS 集計結果
FROM テーブル名
GROUP BY 列名
例3: 条件に基づいてWHERE句を作成する場合
SELECT 列名
FROM テーブル名
WHERE CASE
WHEN 列名 = '値1' THEN 条件1
WHEN 列名 = '値2' THEN 条件2
ELSE 条件3
END
CASE式は、データの変換や条件に基づく計算など、さまざまな場面で使用されます。
CASE式は入れ子(ネスト)することで、より複雑な条件ロジックを表現することもできます。
入れ子(ネスト)したCASE式
ネストされたCASE式は、CASE式内の結果として別のCASE式を含むように構築されます。
そして、条件の評価と結果の決定を階層的に行います。最初のCASE式の条件が一致しない場合は、ネストされたCASE式が評価されます。内側のCASE式も同様に条件を評価し、結果を返します。
入れ子のCASE式の使用例
以下に、入れ子になったCASE式の例を示します。
SELECT 列名,
CASE
WHEN 条件1 THEN
CASE
WHEN 条件A THEN '結果A'
WHEN 条件B THEN '結果B'
ELSE 'デフォルト結果1'
END
WHEN 条件2 THEN
CASE
WHEN 条件C THEN '結果C'
WHEN 条件D THEN '結果D'
ELSE 'デフォルト結果2'
END
ELSE 'デフォルト結果'
END AS 新しい列名
FROM テーブル名
ネストされたCASE式を使用することで、より複雑な条件ロジックを表現できます。
ただし、ネストされたCASE式が多くなるほど、可読性やメンテナンス性が低下する可能性があるため、必要な場合に限って使用するようにしましょう!
ここまで読んでいただきありがとうございます。
SQLでは、CASE式に限らず様々なケースで疑問を感じるかと思います。
「このようなケースの場合はどのように記述したらよいか、、」
「データサイエンティストになるにはどのように効率的に学習していったらよいか?」
など自己学習に不安がありましたら、以下のスクールのご活用もご検討ください!
SQL参考本
SQL学び始めの時はこちらの本を参考にしていました。
DBやテーブルの構造から、よく使う関数などがまとめられています。基礎を身につけたい方におススメです。
SQL関連記事
そのほか、SQL関連記事をこちらにまとめておりますのでご参考ください。
> Coffee Tech Blog SQL関連記事
もしIT業界への転職でお困りでしたら、下記サービスのご活用をご検討ください!
私は転職の際にGeeklyを活用させて頂き、ご縁を頂くことができました。
SQLのCASE式まとめ
以上のように、CASE式は条件に基づいて異なる結果を返すために使用できます。
なお、データベースシステムによっては、入れ子にできるCASE式の深さに制限がある場合もありますので、使用しているデータベースのドキュメントやリファレンスを確認してください。
参考になれば幸いです☕
コメント