この記事ではSQL CASE WHENの使い方を詳しく説明します

この記事ではSQL CASE WHENの使い方を詳しく説明します

シンプルな CASE WHEN 関数:

ケーススコアが「A」の場合は「優秀」、そうでない場合は「不合格」で終了
CASE スコアが「B」の場合は「良好」、そうでない場合は「不合格」で終了
CASE スコアが「C」の場合は「中」、そうでない場合は「不合格」で終了

これは、CASE WHEN 条件式関数を使用するのと同じです。

スコアが「A」の場合、「優秀」
     スコアが「B」の場合、「良好」
     スコアが「C」の場合は「中」、そうでない場合は「不合格」で終了

THEN の後の値は ELSE の後の値と同じ型である必要があります。そうでない場合はエラーが報告されます。次のように:

CASE スコアが「A」の場合は「優秀」、それ以外の場合は 0 終了

「Excellent」と 0 のデータ型が一致しない場合は、エラーが報告されます。

[エラー] ORA-00932: 矛盾したデータ型: CHAR が必要ですが、NUMBER です

単純な CASE WHEN 関数では、いくつかの単純なビジネス シナリオしか処理できませんが、CASE WHEN 条件式の記述ルールはより柔軟です。

CASE WHEN 条件式関数: JAVA の IF ELSE ステートメントに似ています。

形式:

CASE WHEN 条件 THEN 結果

[いつ...それから...]

ELSE 結果

終わり

condition はブール型を返す式です。式が true を返す場合、関数全体は対応する結果の値を返します。すべての式が false の場合、ElSE 後の結果の値が返されます。ELSE 句が省略されている場合は、NULL が返されます。

以下に一般的なシナリオをいくつか示します。

シナリオ 1: スコアがあり、スコア < 60 の場合は不合格、スコア >= 60 の場合は合格、スコア >= 80 の場合は優秀スコアが返されます。

選択
    学生名、
    (スコアが60未満の場合は「不合格」となります)
        スコアが60以上かつスコアが80未満の場合は「合格」
        スコアが80以上の場合、「優秀」
        ELSE '例外' END) AS REMARK
から
    テーブル

注意: スコアが null かどうかをチェックしたい場合、WHEN score = null THEN '試験に欠席' という書き方は正しくありません。正しい書き方は次のとおりです。

スコアがNULLの場合、「試験に欠席」、それ以外の場合は「正常」、終了

シナリオ 2: 教師は、クラスに何人の男子と何人の女子がいて、何人の男子と何人の女子が試験に合格したかを数える必要があります。教師は、SQL ステートメントを使用して結果を出力する必要があります。

テーブル構造は次のとおりです: STU_SEX フィールドでは、0 は男の子を表し、1 は女の子を表します。

コードスタッフ名セックスSTU_スコア
エックスエムシャオミン0 88
XLシャオレイ0 55
エクセレントシャオフェン0 45
XHリトルレッド1 66
翻訳シャオニ1 77
XYシャオ・イー1 99
選択 
	SUM (CASE WHEN STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_COUNT、
	SUM (CASE WHEN STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT、
	SUM (STU_SCORE >= 60 かつ STU_SEX = 0 の場合は 1、それ以外の場合は 0 終了) AS MALE_PASS、
	SUM (STU_SCORE >= 60 かつ STU_SEX = 1 の場合は 1、それ以外の場合は 0 終了) AS FEMALE_PASS
から 
	学生

出力は次のようになります。

男性数女性数男性パス女性パス
3 3 1 3

シナリオ 3: 集計関数を使用した従来の行から列への変換と統計分析

ここで、各都市の水消費量、電気消費量、熱消費量の合計を数え、SQL文を使用して結果を出力する必要があります。

エネルギー消費表は次のとおりです。E_TYPEはエネルギー消費タイプを表し、0は水消費、1は電気消費、2は熱消費を表します。

E_コードE_値E_タイプ
北京28.50 0
北京23.51 1
北京28.12 2
北京12.30 0
北京15.46 1
上海18.88 0
上海16.66 1
上海19.99 0
上海10.05 0
選択 
	E_コード、
	SUM(CASE WHEN E_TYPE = 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY、--水の消費量 SUM(CASE WHEN E_TYPE = 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY、--電気の消費量 SUM(CASE WHEN E_TYPE = 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY、--熱の消費量 FROM 
	エネルギーテスト
グループ化
	E_コード

出力は次のようになります

E_コード水_エネルギー電気エネルギー熱エネルギー
北京40.80 38.97 28.12
上海48.92 16.66 0

シナリオ 4: CASE WHEN でのサブクエリの使用

都市の電力消費量に基づいて電気料金を計算します。電力消費の単価を 3 つのレベルに分割し、対応する価格を使用して、異なるエネルギー消費値に応じてコストを計算します。

価格表は以下の通りです。

価格P_レベルP_制限
1.20 0 10
1.70 1 30
2.50 2 50

エネルギー消費値が 10 未満の場合は、P_LEVEL=0 のときの P_PRICE 値が使用されます。エネルギー消費値が 10 より大きく 30 未満の場合は、P_LEVEL=1 のときの P_PRICE 値が使用されます。

エネルギー <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 0) の場合、(SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 0)
    エネルギー > (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 0) かつ エネルギー <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 1) の場合、(SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 1)
    エネルギー > (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 1) かつ エネルギー <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 2) の場合、(SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 2)

シナリオ5: 最大集計関数と組み合わせる

CASE WHEN 関数は使い方が簡単で、理解しやすい関数です。この記事では使い方について簡単に紹介しただけです。実際の業務では、さまざまなビジネス シナリオに応じて柔軟に使用する必要があります。

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • SQL Server での判断文 (IF ELSE/CASE WHEN) の使用例
  • SqlServer は、複数条件のあいまいクエリ問題を解決するために case を使用します。
  • SQL 学習: CASE WHEN THEN ELSE END の使い方
  • SQL ステートメントの行と列の変換の 2 つの方法の簡単な分析: ケース... 場合とピボット関数の適用
  • SQL 集計関数で case when then を使用する際のヒント
  • SQL で case when 構文を使用する方法
  • SQL CASE WHENの具体的な使用法の詳細な説明

<<:  HTML は CSS スタイルと JS スクリプトを動的に読み込みます。例

>>:  Layuiはログインインターフェース検証コードを実装します

推薦する

Linux 上の MySQL 5.7 でパスワードを忘れる問題を解決する

1. 問題Linux 上の mysql5.7 のパスワードを忘れました2. 解決策• ステップ 1:...

CSS は、モバイル端末でクリックされたときに生成された要素の背景色を削除します (推奨)

クリック時に背景色を生成する要素の CSS スタイルに次のコードを追加します。 -webkit-ta...

動的および静的分離を実装するための Nginx サンプル コード

この記事のシナリオと組み合わせて、Nginx と Java 環境 (SpringBoot プロジェク...

JDカルーセル効果を実現するための純粋なHTMLとCSS

JD カルーセルは、動的な効果を追加せず、主に位置決めの知識を使用して、純粋な HTML と CS...

入力ボックスのプレースホルダーアニメーションと入力検証を実現する純粋なCSS

さらに興味深いコンテンツについては、https://github.com/abc-club/free...

CSSはメッセージパネルをスライドするWebコンポーネント機能を実装します

みなさんこんにちは。私と同じように混乱している方はいらっしゃいませんか。CSS は簡単に始められます...

Flexレイアウトとスケーリング計算についての簡単な説明

1. Flexレイアウトの紹介Flex は Flexible Box の略で、「柔軟なレイアウト」を...

Linux のハードリンクとソフトリンクの区別

Linux には、2 種類のファイル接続があります。1 つは Windows のショートカットに似て...

FileZilla 425 FTP に接続できない (Alibaba クラウド サーバー) の解決策

Alibaba Cloud ServerがFTPに接続できないFileZilla 425 データ接続...

nginx を介してローカルでリバースプロキシを構成するプロセス全体

序文Nginx は、イベント駆動型の非同期非ブロッキング処理フレームワークを使用する軽量 HTTP ...

Vue codemirrorはオンラインコードコンパイラの効果を実現します

序文Web 上でオンライン コード コンパイルの効果を実現したい場合は、 CodeMirrorを再度...

Vue で動的なスタイルを実現するためのさまざまな方法のまとめ

目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...

Linux インストール Apache サーバー構成プロセス

袋を用意するインストールApacheがすでにインストールされているかどうかを確認するrpm -qa ...

JavaScript コードを省略する一般的な方法の概要

目次序文矢印関数一般的な配列操作をマスターするスプレッド演算子オブジェクトの省略形構造化割り当てデー...

LinuxサーバーにVueプロジェクトをデプロイする

ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...