この記事では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 でスレッドを作成するための pthread_create の具体的な使用法

pthread_create関数機能紹介pthread_createはUNIX環境のスレッド作成関数...

CSS で text-align と margin: 0 auto を使用して中央に配置する例コード

CSSでtext-align、margin: 0 autoを使用して中央揃えにするtext-alig...

フローチャートとUIフローの違い

UI デザインにおける多くの概念は言葉で言えば似ているように見えるかもしれませんが、実際には大きく異...

デザインにおいて無視できないインタラクティブデザインにおける製品状態の分析

製品デザインのプロセスにおいて、デザイナーは常に写真を非常に美しくすることを好みます。仮想ページのコ...

MySQLにデータを素早くインポートする方法

序文:日々の勉強や仕事の中で、データをエクスポートする必要に迫られることがよくあります。たとえば、デ...

Vueのドラッグ可能なコンポーネントであるVue Smooth DnDの使用方法の詳細な説明

目次紹介とデモAPI: コンテナ財産ライフサイクルコールバックイベントAPI: ドラッグ可能実際の戦...

DockerイントラネットはDNSを構築し、ip:port操作の代わりにドメイン名アクセスを使用します

たとえば、イントラネットに Jenkins サーバーがある場合、そのサーバーにアクセスするには、その...

10分でDockerを使ったマイクロサービスのデプロイ方法を学ぶ

Docker は 2013 年のリリース以来、広く注目され、ソフトウェア業界を変える可能性を秘めてい...

CSS calc() の数式に関する詳細な理解

数式 calc() は CSS の関数であり、主に数学演算に使用されます。 calc() を使用する...

vite2.0+vue3 モバイルプロジェクトの詳細な説明

1. 関連する技術的なポイントバイト版ヴュー3 ts統合ルーティングvuexを統合するAxiosを統...

Vuex ステートマシンの簡単な理解とサンプルアプリケーション

目次1. 概念の素早い理解: 1. コンポーネント間でデータを共有する方法: 2. vuex とは何...

JavaScript におけるブラウザ互換性の問題について簡単に説明します

ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...

指定したディレクトリに nginx をインストールする方法の例

会社の要件により、異なる場所にある 2 つの nginx サーバーを同じマシンにインストールする必要...

CSS 円形ホローイングの実装(クーポン背景画像)

この記事では主に、クーポンの背景画像などでよく使われる CSS 円形ホローイングについて紹介し、皆さ...

Linux でユーザーを完全に削除する 2 つの方法

Linux 操作実験環境: Centos7 仮想マシンまず、共通ユーザーgubeiqingを作成しま...