複数の条件下での CASE WHEN 関数ステートメントの使用方法の詳細な説明

2023-07-08 21:46:17

Turbopack が Webpack より 700 倍高速な理由 CSS グリッド レイアウト (Grid Layout )

目次

  1. CASEの2つのフォーマット
    1. 簡易CASE機能
    2. CASE検索機能
    3. 2 つの形式の例
  2. SUM メソッドと COUNT メソッドの両方で使用します
    1. SUM関数
    2. COUNT関数

CASE WHEN 関数ステートメントは、単純な CASE 関数と CASE 検索関数の 2 つの形式を実現します。

SUM メソッドと COUNT メソッドの同時使用と連携する

CASE の 2 つの形式

簡易CASE機能


CASE 条件パラメータ名
    WHEN パラメータ値1 THEN '表示値1'
    WHEN パラメータ値2 THEN '表示値2'
    ...
ELSE '他の値を表示する' END

CASE検索機能


CASE 
    WHEN 条件パラメータ名 = 'パラメータ値1' THEN '表示値1'
    WHEN 条件パラメータ名 = 'パラメータ値2' THEN '显示值2'
    ...
ELSE '他の値を表示する' END

2 つの形式の例

州:state
注文番号:orderId


SELECT
	orderId,
	CASE state
	    WHEN 1 THEN '起動'
	    WHEN 2 THEN '閉鎖'
	ELSE '不明な状態' END AS statusName
FROM t_table

SELECT
	orderId,
	CASE 
	    WHEN state = '1' THEN '起動'
	    WHEN state = '2' THEN '閉鎖'
	ELSE '不明な状態' END AS stateName
FROM t_table

これら 2 つの形式は同じ機能を実現できます。 ただし、簡易 CASE 機能は CASE 検索機能と比較して機能に制限があります。;

判断力のある

SELECT
	orderId,
	CASE 
	    WHEN state = '1' THEN '起動'
	    WHEN state = '2' THEN '閉鎖'
	    WHEN state IN ('3', '4') THEN 'ロックが解除される'
	ELSE '不明な状態' END AS stateName
FROM t_table

複数の場合、WHEN の IN 条件の値と次の WHEN の条件の一致は無視されます。たとえば、次の「クローズ」状態は無視されます。 「closed」 は決して取得されません

SELECT
	orderId,
	CASE 
	    WHEN state = '1' THEN '起動'
	    WHEN state IN ('2', '3', '4') THEN 'ロックが解除される'
	    WHEN state = '2' THEN '閉鎖'
	ELSE '不明な状態' END AS stateName
FROM t_table

SUM メソッドと COUNT メソッドの両方で使用します

① SUM関数


**簡単なCASE機能**
SUM(CASE 条件パラメータ名
    	WHEN パラメータ値 THEN '合計値を表示'
	ELSE 0 END
	) AS SUMAMT


**CASE検索機能**
SUM(CASE 
    	WHEN 条件パラメータ名 = 'パラメータ値' THEN '合計値を表示'
	ELSE 0 END
	) AS SUMAMT


**また**
SUM(CASE 
    	WHEN 
    		条件パラメータ名1 = 'パラメータ値1' AND 条件パラメータ名2 = 'パラメータ値2' ...
    	THEN '合計値を表示'
	ELSE 0 END
	) AS SUMAMT
	

**また**
SUM(CASE 
    	WHEN 
    		条件パラメータ名1 IN ('パラメータ値n') AND 条件パラメータ名2 = 'パラメータ値2' ...
    	THEN '合計値を表示'
	ELSE 0 END
	) AS SUMAMT

例: 時間条件に従って値をクエリします。値がある場合は「合計値」が表示され、値がない場合は「null」が表示されます。
ステータス: 状態
タイプ: t_type
金額: amt


**簡単なCASE機能**
SELECT
	SUM(CASE state
	    WHEN 1 THEN amt
	ELSE 0 END 
	) AS sumAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time


**CASE検索機能**
SELECT
	SUM(CASE 
	    WHEN state = '1' THEN amt
	ELSE 0 END 
	) AS sumAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time


**また**
SELECT
	SUM(CASE 
	    WHEN state = '1' AND t_type = '2' THEN amt
	ELSE 0 END 
	) AS sumAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time


**また**
SELECT
	SUM(CASE 
	    WHEN state IN ('2', '3', '4') AND t_type = '2' THEN amt
	ELSE 0 END 
	) AS sumAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time

② COUNT函数


**簡単なCASE機能**
COUNT(CASE 条件パラメータ名
    	WHEN パラメータ値 THEN 1
	ELSE 0 END
	) AS COUNTAMT


**CASE搜索函数**
COUNT(CASE 
    	WHEN 条件パラメータ名 = 'パラメータ値' THEN 1
	ELSE 0 END
	) AS COUNTAMT


**或者**	
COUNT(CASE 
    	WHEN 
    		条件パラメータ名1 = 'パラメータ値1' AND 条件パラメータ名2 = 'パラメータ値2' ...
    	THEN 1
	ELSE 0 END
	) AS COUNTAMT

	
**或者**	
COUNT(CASE 
    	WHEN 
    		条件パラメータ名1 IN ('パラメータ値n') AND 条件パラメータ名2 = 'パラメータ値2' ...
    	THEN 1
	ELSE 0 END
	) AS COUNTAMT

例: 時間条件に従って値をクエリし、値がある場合は「合計値」を表示し、値がない場合は「0」を表示します
ステータス: state
タイプ: t_type
金額: amt


**簡単なCASE機能**
SELECT
	COUNT(CASE state
	    WHEN 1 THEN 1
	ELSE 0 END 
	) AS countAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time


**CASE検索機能**
SELECT
	COUNT(CASE 
	    WHEN state = '1' THEN 1
	ELSE 0 END 
	) AS countAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time


**また**
SELECT
	COUNT(CASE 
	    WHEN state = '1' AND t_type = '2' THEN 1
	ELSE 0 END 
	) AS countAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time


**また**
SELECT
	COUNT(CASE 
	    WHEN state IN ('2', '3', '4') AND t_type = '2' THEN 1
	ELSE 0 END 
	) AS countAmt
FROM 
	t_table
WHERE
	core_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time