この記事では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はログインインターフェース検証コードを実装します

推薦する

MySQL 5.7.10 インストール ドキュメント チュートリアル

1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...

MySQL 8.0.24 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.24のインストールチュートリアルを参考までに紹介します。具体的な内...

MySQL 数十億のデータのインポート、エクスポート、移行に関するメモ

最近はMySQLのメモをたくさん取っていますが、それは主に会社のOracleが比較的安定していてメン...

MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法

% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...

Vue3を使用してjsで呼び出せるコンポーネントを実装する

目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...

MySql のインデックス、ロック、トランザクションの知識ポイントのまとめ

この記事では、MySql のインデックス、ロック、トランザクションに関する知識のポイントをまとめてい...

CSS3 画像の境界線を学ぶのに役立つ記事

CSS3 border-image プロパティを使用すると、要素の周囲に画像の境界線を設定できます。...

IP アドレス経由で MySql にアクセスする方法

1. mysqlにログインします。 mysql -u ルート -h 127.0.0.1 -p 2. ...

LinuxスレッドのPID(TID、LWP)を取得するいくつかの方法の詳細な説明

Linux C/C++ では、スレッド レベルの操作は通常、pthread ライブラリを通じて実行さ...

WeChatアプレット開発の実践スキル:データの転送と保存

日々の開発で遭遇した様々な問題と、その解決策を閲覧しながら、日々の開発でよく使用するスキルや知識ポイ...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

実務経験7年のフロントエンドスーパーバイザーによる経験共有

今日はベテランの貴重な経験を共有します。著者は技術管理の経験が7年あり、多い時は80人以上を率いてい...

React と Threejs を使用して VR パノラマ プロジェクトを作成する詳細なプロセス

最近、 Three.jsでReactを使用して、720 度のパノラマ写真を閲覧できるプロジェクトを構...

Vue プラグイン エラー: このページで Vue.js が検出されました。問題は解決しました

Vue プラグインがエラーを報告しました: このページで Vue.js が検出されましたVueプラグ...

DockerでMySQLマスタースレーブ環境を構築する方法の詳しい説明

序文この記事では、docker-compose と dockerfile を使用して、binlog ...