はじめに
SQLのCASE
句は、条件に応じて異なる値を返すための強力なツールです。例えば、ポイントプログラムのランクや、天気予報に基づくお勧めの服装など、様々な条件分岐で利用できます。
基本的な構文
SELECT
CASE
--(いつ) (その時に)
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
--(それ以外)
ELSE デフォルト結果
END AS 列名
FROM テーブル名;
この構文では、条件が一致する場合にその結果を返し、どの条件にも一致しない場合にはELSE
の後に指定したデフォルトの結果が返されます。
具体例1: ポイントプログラムのランク分け
たとえば、顧客の累計購入金額に応じて、顧客をランク分けする場合を考えてみましょう。
SELECT
顧客名,
累計購入金額,
----
CASE
--------
WHEN 累計購入金額 >= 100000 THEN 'プラチナ'
WHEN 累計購入金額 >= 50000 THEN 'ゴールド'
WHEN 累計購入金額 >= 10000 THEN 'シルバー'
ELSE 'ブロンズ'
END AS 顧客ランク
FROM 顧客テーブル;
この例では、累計購入金額が100,000円以上の顧客を「プラチナ」ランク、50,000円以上の顧客を「ゴールド」ランク、10,000円以上の顧客を「シルバー」ランク、それ以外を「ブロンズ」ランクに分類しています。
具体例2: 天気予報に基づくお勧めの服装
天気予報に基づいて、その日の服装をお勧めする場合を考えます。
SELECT
日付,
天気,
CASE
WHEN 天気 = '晴れ' THEN 'Tシャツ'
WHEN 天気 = '曇り' THEN '長袖シャツ'
WHEN 天気 = '雨' THEN 'レインコート'
ELSE 'ジャケット'
END AS お勧めの服装
FROM 天気予報テーブル;
この例では、天気が「晴れ」の場合には「Tシャツ」、曇りの場合は「長袖シャツ」、雨の場合は「レインコート」、その他の場合は「ジャケット」をお勧めします。
注意点
-
ネストは避ける
CASE
句は他のCASE
句内にネストして使うことが可能ですが、読みやすさを保つためには避けた方が良い場合があります。コードが複雑になりがちなので、できるだけ簡潔に書くようにしましょう。 -
NULLの扱いに注意
SQLではNULL
は特別な値として扱われます。例えば、NULL
値をCASE
句でチェックする場合にはIS NULL
を使いましょう。次の例では、天気が不明の場合には「情報なし」と表示します。SELECT 日付, 天気, CASE WHEN 天気 IS NULL THEN '情報なし' WHEN 天気 = '晴れ' THEN 'Tシャツ' ELSE 'ジャケット' END AS お勧めの服装 FROM 天気予報テーブル;
-
パフォーマンスへの影響
大規模なデータセットに対して複雑なCASE
句を使用すると、クエリのパフォーマンスに影響を与える可能性があります。条件を簡潔にし、必要に応じてインデックスを活用することで、パフォーマンスを改善できます。 -
可読性の確保
CASE
句が長くなると、コードの可読性が低下する恐れがあります。条件を分かりやすく整理し、必要に応じてコメントを追加して、他の開発者が読みやすいコードを書くことを心がけましょう。
まとめ
SQLのCASE
句は、さまざまな条件に基づいてデータを分類したり、変換したりするための強力なツールです。この記事を通じて、CASE
句の基本的な使い方と注意点を理解し、より柔軟で効率的なクエリを書くためのヒントを得ていただけたら幸いです。