サイトアイコン ITC Media

MySQLでCASE文を使おう|実例付きですぐに使える

(最終更新月:2023年10月)

✔以下のような方へ向けて書かれた記事です

「MySQLのCASE文をどう使用すればいいのだろう?」

「MySQLにおけるCASE文の適切な書き方を知りたい」

「MySQLでCASE文を使った実際の例が見たい」

✔当記事を通じてお伝えすること

当記事では、MySQLにおけるCASE文の基本的な理解から、その柔軟な応用方法まで、実例を交えて詳細にわたって解説します。

ぜひ、最後までお読みください。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

CASE式、簡単な理解

こちらでは、MySQLのCASE式についてお伝えしていきます。

CASE式について理解することで、複雑な条件分岐を行いながらのデータ処理が可能です。

CASE式とは

CASE式は、SQL内で条件分岐をおこなうための式です。

ほかのプログラミング言語のif文やswitch文のような役割を果たします。

データの取得や変換の際に、特定の条件に応じて異なる処理を実行できます。

CASE式の基本的な構文

基本的なCASE式の構文は以下のようになります。

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE result
END

この構文を使用することで、複数の条件を順番に評価し、最初に真となる条件の結果を返します。

CASE式の基本的な利用

こちらでは、CASE式を使用する基本的な例について詳しく解説していきます。

これを通じて、実際のデータベース処理でのCASE式の活用方法を学べるでしょう。

初心者向けCASE式の使用例

例として、学生の得点を基にして成績(優良可不可)を決定するクエリを考えます。

SELECT name, score,
CASE
    WHEN score >= 90 THEN '優'
    WHEN score >= 70 THEN '良'
    WHEN score >= 50 THEN '可'
    ELSE '不可'
END AS grade
FROM students;

このクエリにより、studentsテーブルの各学生の名前、得点、および成績が表示されます。

CASE式用のMySQLの環境設定

CASE式を使用する前に、適切なデータベース環境の設定が必要です。

まず、MySQLをインストールし、適切なデータベースとテーブルを準備しましょう。

次に、サンプルデータを追加して、上記のようなクエリを実行できる状態にします。

CASE式の応用例と補足知識

このセクションでは、CASE式の応用例として、部署ごとの男女比を求めるクエリについて解説します。

このクエリを理解・作成するために必要なSUM関数やGROUPBYの概要も見ていきましょう。

SUM関数とその使用方法

SUM関数は、指定されたカラムの数値の合計を計算するための関数です。

特定の条件に一致するレコードの値を合計したい場合などに非常に便利。

SELECT SUM(score) AS total_score FROM students WHERE grade = 'A';

‘A’の成績を持つ学生のスコアの合計を返します。

GROUPBYの説明と用途

GROUPBY句は、特定のカラムの値に基づいてレコードをグループ化するための機能です。

これにより、各グループごとに集計関数(SUM、AVGなど)を適用できます。

SELECT department, COUNT(*) AS number_of_students 
FROM students 
GROUP BY department;

このクエリは、各部署の学生の数をカウントします。

応用例: 部署ごとの男女比を求めるクエリ

部署ごとに男女の数をカウントし、その比率を表示するには、CASE式とGROUP BYを組み合わせます。

SELECT department,
       SUM(CASE WHEN gender = '男' THEN 1 ELSE 0 END) AS male_count,
       SUM(CASE WHEN gender = '女' THEN 1 ELSE 0 END) AS female_count
FROM employees
GROUP BY department;

このクエリにより、各部署の男性と女性の数が一覧表示されます。

CASE式の型と値の処理方法

こちらでは、CASE式での型と値の処理方法に焦点を当てて解説します。

これにより、より柔軟なデータ操作が可能です。

サンプルコードを用いた型と値の処理の解説

CASE式を使用する際、異なるデータ型のカラムや値を条件にできます。

その場合、適切な型変換や処理が必要です。

例えば、文字列と数値を比較する場合などが挙げられます。

SELECT product_name,
       CASE 
           WHEN price > 1000 THEN '高い'
           ELSE '安い'
       END AS price_category
FROM products
WHERE price = '1000';

この例では、priceカラムが文字列型と仮定して、’1000’という値と比較しています。

適切な型変換を行わないと、期待通りの結果が得られない場合があります。

CASE式のパフォーマンスとエラー対策

こちらでは、CASE式を使った際のパフォーマンスの影響と、一般的に出会うエラーにどう対処するかを解説します。

これにより、よりスムーズにデータベース操作を行うための知識を得られるでしょう。

パフォーマンスへの影響と最適化のヒント

CASE式は非常に便利ですが、複雑な条件や大量のデータに適用すると、クエリのパフォーマンスに影響を及ぼすことがあります。

  1. インデックスの利用
    WHERE句の条件やORDER BY句でCASE式を使用する場合、インデックスが効果的に利用されないことがあります。これを解決するには、インデックスの設計を見直す必要がある場合があります。
  2. サブクエリの使用
    CASE式内で複雑な計算や処理を行う場合、サブクエリを使用して処理を分割することで、パフォーマンスの向上が期待できます。
  3. CASE式の順序
    CASE式は上から順に評価されます。そのため、最も頻繁に真となる条件を最初に配置することで、評価の回数を減らし、パフォーマンスを向上させられます。

一般的なエラーとその対処法

CASE式を使用する際には、いくつかの一般的なエラーに遭遇する可能性があります。

  1. 型の不一致
    CASE式のTHEN部分とELSE部分のデータ型が異なる場合、エラーが発生することがあります。解決策として、明示的な型変換を使用して一致させる必要があります。
  2. 終了の不足
    CASE式を終了するためのENDキーワードの欠落は、構文エラーを引き起こします。CASE式を記述する際は、必ずENDキーワードを忘れずに使用してください。
  3. 条件の不完全性
    すべての可能なシナリオをカバーしていない場合、期待しない結果やNULL値が返される可能性があります。ELSE句を適切に使用して、これを回避することができます。

レビューとクイズ

こちらで、今回学んだ内容を再確認し、理解を深めるためのクイズも提供します。

これにより、より確固たる知識としてCASE式を身につけられるでしょう。

学んだ内容の再確認

CASE式に関して、私たちは以下の重要なポイントを学びました。

事例を用いたクイズを提供

以下は、学びたての知識をテストするためのクイズです。

各問題に答えて、理解度を確認しましょう。

クイズ1

以下のSQLクエリの出力結果は何ですか?

SELECT CASE 
          WHEN 10 > 5 THEN 'True' 
          ELSE 'False' 
       END;

回答:True

クイズ2

salaryというカラムを持つemployeesテーブルに対して、給与が50,000以上の場合は’High’, それ以下の場合は’Low’と表示するSQLを書いてください。

回答:

SELECT CASE 
          WHEN salary >= 50000 THEN 'High' 
          ELSE 'Low' 
       END AS salary_category 
FROM employees;

クイズ3

CASE式内で、複数のWHEN句が真となる場合、どの結果が返されますか?

回答:最初に真となるWHEN句の結果が返されます。

クイズ4

CASE WHEN A THEN B ELSE C END このCASE式において、A, B, Cそれぞれは何を表していますか?

回答:

Aは評価される条件、Bはその条件が真の場合に返される結果、Cはその条件が偽の場合に返される結果を表しています。

まとめ

当記事では、MySQLのCASE式について学習してきました。

CASE式の強力な機能を十分に理解し、日常のデータベース操作に活用してください。

モバイルバージョンを終了