SQL `CASE`ステートメントの理解:構文、ユースケース、および例
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Key Takeaways
- SQLの
CASE
ステートメントは、条件付きロジックをクエリに直接追加します。 - 効率的にデータを分類、変換、フィルタリングするのに役立ちます。
- 適切な使用はSQLの可読性と柔軟性を向上させます。
SQLのCASE
ステートメントは、if-then-elseロジックをSQLクエリ内で直接実装できる強力な条件式です。条件を評価し、それらの条件に基づいて特定の結果を返すことができるため、クエリをより動的で適応性のあるものにできます。(https://leapcell.io/?lc_t=n_goselect)
構文
CASE
ステートメントには、主に2つの形式があります。
-
単純な
CASE
式: 式を単純な式のセットと比較して、結果を決定します。(https://leapcell.io/?lc_t=n_goselect)CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE resultN END
-
検索
CASE
式: 一連のブール式を評価して、結果を決定します。(https://leapcell.io/?lc_t=n_goselect)CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END
どちらの形式でも、ELSE
句はオプションです。条件が満たされず、ELSE
が提供されない場合、CASE
ステートメントはNULL
を返します。(https://leapcell.io/?lc_t=n_goselect)
ユースケースと例
1. データの分類
CASE
ステートメントを使用して、特定の条件に基づいてデータを異なるグループに分類できます。(https://leapcell.io/?lc_t=n_goselect)
SELECT TransactionID, Amount, CASE WHEN Amount < 1000 THEN 'Low' WHEN Amount >= 1000 AND Amount < 5000 THEN 'Medium' WHEN Amount >= 5000 THEN 'High' ELSE 'Unknown' END AS TransactionCategory FROM SalesTransactions;
このクエリは、Amount
に基づいてトランザクションを「Low」、「Medium」、または「High」カテゴリに分類します。(https://leapcell.io/?lc_t=n_goselect)
2. NULL値の処理
CASE
ステートメントは、NULL
値をより意味のある情報に置き換えることで、NULL
値を管理するのに役立ちます。(https://leapcell.io/?lc_t=n_goselect)
SELECT CustomerID, OrderDate, CASE WHEN OrderDate IS NULL THEN 'No Order Date' ELSE 'Order Placed' END AS OrderStatus FROM Orders;
このクエリは、OrderDate
がNULL
の注文を「No Order Date」とし、それ以外を「Order Placed」とラベル付けします。(https://leapcell.io/?lc_t=n_goselect)
3. 集計列の作成
集計関数内でCASE
を使用して、条件付き集計を計算できます。
SELECT Department, COUNT(*) AS TotalEmployees, SUM(CASE WHEN Gender = 'Male' THEN 1 ELSE 0 END) AS MaleEmployees, SUM(CASE WHEN Gender = 'Female' THEN 1 ELSE 0 END) AS FemaleEmployees FROM Employees GROUP BY Department;
このクエリは、従業員の総数をカウントし、各部門の性別ごとの内訳を示します。
4. 条件付きの並べ替え
CASE
ステートメントは、データを条件付きで並べ替えるためにORDER BY
句で使用できます。
SELECT CustomerName, City, Country FROM Customers ORDER BY CASE WHEN City IS NULL THEN Country ELSE City END;
このクエリは、顧客をCity
で並べ替えますが、City
がNULL
の場合は、代わりにCountry
で並べ替えます。(https://leapcell.io/?lc_t=n_goselect)
5. WHERE句での条件付きフィルタリング
WHERE
句でCASE
を使用して、複雑なフィルタリングロジックを適用できます。
SELECT * FROM Projects WHERE ProjectID = CASE @Condition WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 3 THEN 3 ELSE ProjectID END;
このクエリは、@Condition
パラメータによって提供される動的な条件に基づいてプロジェクトをフィルタリングします。(https://leapcell.io/?lc_t=n_goselect)
ベストプラクティス
-
一致しない条件を処理するために
ELSE
を使用する:WHEN
条件のいずれも満たされない場合に備えて、必ずELSE
句を含めてください。これにより、予期しないNULL
の結果を防ぎます。(https://leapcell.io/?lc_t=n_goselect) -
条件を相互に排他的に保つ:
WHEN
条件が相互に排他的であることを確認して、結果の曖昧さを回避します。 -
可読性のために
CASE
を使用する: 複雑な条件付きロジックを扱う場合、CASE
ステートメントを使用すると、ネストされたIF
ステートメントや複数のOR
条件と比較して、SQLクエリの可読性と保守性が向上します。(https://leapcell.io/?lc_t=n_goselect)
結論
SQLのCASE
ステートメントは、クエリに条件付きロジックを導入できる汎用性の高いツールです。CASE
を理解して効果的に利用することで、SQLステートメント内で直接、複雑なデータ変換、集計、フィルタリングを実行でき、より効率的で読みやすいコードにつながります。(https://leapcell.io/?lc_t=n_goselect)
FAQs
SQLクエリでif-then-elseロジックを可能にすること。
動的なデータ分類と条件付きの結果を可能にします。
一致しない条件を処理し、予期しないNULLを回避するため。
Leapcellは、バックエンドプロジェクトをホストするための最良の選択肢です。
Leapcellは、Webホスティング、非同期タスク、およびRedis向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、または Rustで開発。
無料の無制限のプロジェクトをデプロイ
- 使用量に対してのみ料金を支払い — リクエストも料金もかかりません。
比類のない費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで平均応答時間60ミリ秒で694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
簡単なスケーラビリティと高性能
- 高い同時実行性を簡単に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ — 構築に集中するだけです。
ドキュメントで詳細をご覧ください!
Xでフォローしてください:@LeapcellHQ