SQLの条件分岐入門:CASE WHENとIF関数の使い方
投稿日:
はじめに
SQLでデータを操作する際、条件に応じて異なる値を返すことができると便利です。これを実現するために、SQLには「CASE WHEN」や「IF」関数があります。今回は、これらの条件分岐を使用する方法について詳しく解説します。
CASE WHEN文
CASE WHEN文は、複数の条件を評価し、それぞれの条件に応じた結果を返すために使用されます。基本的な構文は次の通りです。
SELECT
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END AS new_column
FROM table_name;
例 employeesテーブルから、給与に応じて従業員のランクを表示するクエリは次の通りです。
SELECT
first_name,
last_name,
salary,
CASE
WHEN salary >= 80000 THEN 'High'
WHEN salary >= 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_rank
FROM employees;
このクエリは、employeesテーブルのsalary列を評価し、それに応じてsalary_rank列に「High」、「Medium」、「Low」を割り当てて返します。
IF関数
IF関数は、1つの条件を評価し、条件が真の場合と偽の場合に異なる値を返すために使用されます。これは特にMySQLでよく使用されます。
SELECT
IF(condition, true_result, false_result) AS new_column
FROM table_name;
例 employeesテーブルから、従業員が管理職かどうかを示すクエリは次の通りです。
SELECT
first_name,
last_name,
job_title,
IF(job_title = 'Manager', 'Yes', 'No') AS is_manager
FROM employees;
このクエリは、employeesテーブルのjob_title列を評価し、それが「Manager」であればis_manager列に「Yes」、それ以外であれば「No」を返します。
CASE WHENの応用
CASE WHEN文は、複雑な条件分岐にも対応でき、集計関数と組み合わせることもできます。
例 employeesテーブルから、各部門の平均給与と、その給与が特定の基準を満たしているかどうかを示すクエリは次の通りです。
SELECT
department_id,
AVG(salary) AS avg_salary,
CASE
WHEN AVG(salary) >= 70000 THEN 'Above Standard'
ELSE 'Below Standard'
END AS salary_status
FROM employees
GROUP BY department_id;
このクエリは、各部門の平均給与を計算し、その給与が70000以上であればsalary_status列に「Above Standard」、それ以外であれば「Below Standard」を返します。
IF関数の応用
IF関数も、集計関数と組み合わせて使用することができます。
例 employeesテーブルから、各部門の総給与と、その給与が特定の基準を満たしているかどうかを示すクエリは次の通りです。
SELECT
department_id,
SUM(salary) AS total_salary,
IF(SUM(salary) >= 300000, 'Above Budget', 'Within Budget') AS budget_status
FROM employees
GROUP BY department_id;
このクエリは、各部門の総給与を計算し、その給与が300000以上であればbudget_status列に「Above Budget」、それ以外であれば「Within Budget」を返します。
まとめ
今回は、SQLの条件分岐を実現するための「CASE WHEN」文と「IF」関数の基本的な使用方法と応用例について学びました。これらの機能を使いこなすことで、データの表示をより柔軟にコントロールすることができます。次回の記事では、さらに高度なSQLクエリやデータベース操作について詳しく解説していきます。ぜひご期待ください!