【CASEについて】

CASEとは?
SQLCASE は、条件に応じて値を変える「もし〜なら」文です。
ExcelのIF関数や、プログラミングのif文に似ています。

【なぜ使うのか?】
例えば、「テストの点数が100点だったら ‘満点’、60点〜100点未満なら ‘合格’、
60点未満なら ‘不合格’」のように、1つのカラムの値を条件によってグループ分けしたいときに使います。

書き方

CASE
    WHEN 条件1 THEN 表示する値1
    WHEN 条件2 THEN 表示する値2
    ...
    ELSE その他の場合の値
END
要素 意味
CASE 条件分岐のスタート
WHEN 「〜のときは」
THEN 「〜という値にする」
ELSE 条件に当てはまらなかったときの値(省略可)
END CASE文の終了

では次の購入履歴データから例題の抽出を考えてみましょう!

元データ

id 名前 購入点数 購入曜日 お会計
1 佐藤 10 2 12000
2 鈴木 8 3 8000
3 田中 6 5 3000
4 高橋 4 7 15000

【使用例1 購入点数での判別】

SELECT
    name,
    result,
    CASE
        WHEN result >= 10 THEN 'A'
        WHEN result >= 6 AND result < 10 THEN 'B'
        ELSE 'C'
    END AS 結果
FROM users;

【実行結果】

名前 購入点数 結果
佐藤 10 A
鈴木 8 B
田中 6 B
高橋 4 C

【使用例2 曜日を日本語に変換】

SELECT
    name,
    weekday,
    CASE
        WHEN weekday = 1 THEN '日曜'
        WHEN weekday = 2 THEN '月曜'
        WHEN weekday = 3 THEN '火曜'
        WHEN weekday = 4 THEN '水曜'
        WHEN weekday = 5 THEN '木曜'
        WHEN weekday = 6 THEN '金曜'
        WHEN weekday = 7 THEN '土曜'
    END AS 曜日
FROM users;

【実行結果】

名前 購入曜日 曜日
佐藤 2 月曜
鈴木 3 火曜
田中 5 木曜
高橋 7 土曜

【使用例3 お会計の金額の大小による分類】

SELECT
    name,
    amount,
    CASE
        WHEN amount >= 10000 THEN '高額'
        WHEN amount >= 5000 THEN '中額'
        ELSE '少額'
    END AS 区分
FROM users;

【実行結果】

名前 お会計 区分
佐藤 12000 高額
鈴木 8000 中額
田中 3000 少額
高橋 15000 高額

【応用例(条件付き集計)】

SELECT
    SUM(CASE WHEN result >= 60 THEN 1 ELSE 0 END) AS AかB,
    SUM(CASE WHEN result < 60 THEN 1 ELSE 0 END) AS C,
    SUM(CASE WHEN amount >= 10000 THEN 1 ELSE 0 END) AS 高額購入者数
FROM users;

【実行結果】

AかB C 高額購入者数
3 1 2

【解説】
SUM(CASE WHEN カラム 条件 THEN 1 ELSE 0 END)
条件に合ったものを1カウントしてそれ以外は数えません。そしてその合計を求めるため条件に満たしたものの数を数えることができます!実際に条件に満たしたものを数えるときにとても役に立ちます。

【まとめ】
CASE は「カラムの値に応じてグループ分けしたいとき」や「条件ごとの件数を集計したいとき」に使える、とても便利なSQL文です!
使いこなせると集計が一つ進化しますね。

コメント

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