CASE WHEN を使って条件ごとの件数を取得する

CASE WHEN を使って条件ごとに振り分けて件数をそれぞれの件数を取得します。

CASE WHEN を使って条件ごとの件数を取得する

あるテーブルに状態を表すフラグを持たせることはよくあります。

その状態を条件ごとに振り分けて件数をそれぞれの件数を取得します。

条件は0が未処理、1が正常終了、2が異常終了

条件は0が未処理、1が正常終了、2が異常終了です。

表示内容は

  1. 未処理の件数
  2. 処理済みの件数
  3. 正常終了の件数
  4. 異常終了の件数
  5. すべての件数

です。

CREATE TABLE test_table
(
     no  INT    --レコードのキー
    ,chk INT    --処理の状態
)

--chk=0->未処理、chk=1->正常chk=2->異常
INSERT INTO test_table VALUES( 1, 0 )
INSERT INTO test_table VALUES( 2, 1 )
INSERT INTO test_table VALUES( 3, 2 )
INSERT INTO test_table VALUES( 4, 0 )
INSERT INTO test_table VALUES( 5, 1 )
INSERT INTO test_table VALUES( 6, 1 )
INSERT INTO test_table VALUES( 4, 0 )
INSERT INTO test_table VALUES( 5, 1 )
INSERT INTO test_table VALUES( 6, 1 )

SELECT
  SUM(CASE WHEN chk=0 THEN 1 END)          AS 未処理
 ,SUM(CASE WHEN chk=1 OR chk=2 THEN 1 END) AS 処理済
 ,SUM(CASE WHEN chk=1 THEN 1 END)          AS 正常
 ,SUM(CASE WHEN chk=2 THEN 1 END)          AS 異常
 ,SUM(1)                                   AS 全件
FROM 
    test_table

DROP TABLE test_table

処理結果は

未処理 処理済 正常 異常 全件
3 6 5 1 9

です。

タイトルとURLをコピーしました