【SQL脱初心者】「そのIF文、Pythonで書く必要ありますか?」CASE式でデータを自由自在に操る魔法
公開日: 2025年11月28日
データベースからデータを取得して、画面に表示する。Web開発の基本中の基本ですね。 しかし、取得したデータに対して、こんな処理をPythonやJavaのコード(アプリケーション側)で書いていませんか?
# Python側での処理(非効率かも?)
for user in users:
if user.age >= 20:
user.type = "大人"
else:
user.type = "子供"
「これの何が悪いの?」と思ったあなた。 もしデータが100万件あったらどうでしょう? 100万回のループとif文が回ることになります。 実は、この程度のロジックなら、SQLに任せてしまったほうが圧倒的に速く、コードもスッキリします。
今日は、SQLの中でif-elseのような条件分岐を実現する最強の武器、「CASE式」の使い方をマスターしましょう。 これが使えるようになると、あなたは「データをただ持ってくる人」から「データを自在に操る人」へと進化します。
🪄 CASE式の基本:SQLの中で条件分岐!
CASE式は、他の言語でいうif...elseやswitch文と同じ役割を果たします。 構文は以下の通りです。
CASE
WHEN 条件1 THEN 値1
WHEN 条件2 THEN 値2
ELSE デフォルト値
END
実践例1:年齢でランク分けする
先ほどのPythonコードを、SQLだけで書いてみましょう。 取得した結果に、自動的に「大人」か「子供」かのラベルが付いてきます。
SELECT
name,
age,
CASE
WHEN age >= 20 THEN '大人'
ELSE '子供'
END AS user_type
FROM users;
このクエリを投げれば、データベースは計算済みの user_type カラムを返してくれます。 アプリケーション側では、受け取った値をそのまま表示するだけ。非常にスマートですね。
🔥 応用テクニック:集計関数との組み合わせ(クロス集計)
CASE式の真骨頂は、SUMやCOUNTなどの集計関数の中に書き込んだ時に発揮されます。 これを使えば、Excelのピボットテーブルのような「クロス集計」がSQL一発で可能になります。
実践例2:男女別のユーザー数を「1行」で出す
通常、男女別の人数を出そうとするとGROUP BY genderを使いますが、そうすると結果が複数行(男性の行、女性の行)になってしまいます。 しかし、CASE式を使えば、これを横持ちの1行で取得できます。
SELECT
-- gender = 1 (男性) の場合だけ 1 を足す、それ以外は NULL (無視される)
COUNT(CASE WHEN gender = 1 THEN 1 END) AS male_count,
-- gender = 2 (女性) の場合だけ 1 を足す
COUNT(CASE WHEN gender = 2 THEN 1 END) AS female_count
FROM users;
実行結果イメージ
| male_count | female_count |
| :--- | :--- |
| 150 | 120 |
このテクニックは、ダッシュボード画面などで「男性〇〇人、女性〇〇人」と表示したい時に、クエリを2回投げる必要がなくなり、パフォーマンスが劇的に向上します。 現場で「おっ、こいつできるな」と思われる、プロの技です。
⚠️ CASE式の注意点
非常に便利なCASE式ですが、初心者がよくやるミスがあります。
- ENDを忘れる: 最後に必ずENDが必要です。忘れるとSyntax Errorになります。
- ELSEの省略: ELSEを省略すると、条件に当てはまらなかった場合はNULLになります。意図せずNULLが入って計算が狂うことがあるので、明示的にELSE 0やELSE その他と書く癖をつけましょう。
まとめ:ロジックをDBに寄せる
「データベースはデータの入れ物」と思っているうちは、まだ初心者です。 データベースは、強力な計算エンジンでもあります。
- 表示用のラベル付けなどは、CASE式で行う。
- 条件付きの集計も、SUMやCOUNTの中にCASEを書くことで実現できる。
- アプリケーション側のコードを減らし、バグの温床を減らす。
複雑なCASE式を書くときは、書き方が合っているか不安になることもありますよね。 そんな時は、当サイトのSQLチェッカーを使ってみてください。構文エラーを即座に検知してくれます。 また、SQL道場でもCASE式を使った問題を追加していく予定ですので、ぜひ腕試しをしてみてください!
複雑なSQLも、AIがチェックします
CASE式やサブクエリなど、長くなったSQLが動かない時は、AI SQLチェッカーにお任せください。エラーの原因と修正案を、日本語で分かりやすく解説します。
AI SQLチェッカーを使ってみる →