モジュールのレッスン (3/4)
条件付きロジック: CASE WHEN
これまで見てきたものはすべて、データをそのまま抽出します。ただし、多くの場合、
変革するために: 給与を階層に分類し、新入社員に次のようなマークを付けます。
「ジュニア」は、数値コードを読み取り可能なラベルに変換します。 SQLの標準
このためのツールは CASE WHEN と呼ばれます。
構文: ミニ if/else
CASE
WHEN condition_1 THEN value_1
WHEN condition_2 THEN value_2
...
ELSE default_value
ENDこれは、どの言語でも if/else if/else とまったく同じように読み取れます。SQL は次のように評価します。
条件を順序で処理し、最初に真の条件で停止し、
対応する value。どれも true でない場合は、ELSE 値を返します。もしあなたが
ELSE を省略し、一致するブランチがない場合は、NULL が返されます。
-- Classify employees by salary tier:
SELECT first_name,
last_name,
salary,
CASE
WHEN salary >= 50000 THEN 'Senior'
WHEN salary >= 35000 THEN 'Mid'
ELSE 'Junior'
END AS tier
FROM employees;CASE は SELECT 内に存在します。他の列と同様に列を生成します。
関数に AS のエイリアスを付けるのはまったく普通のことです (ここでは
tier)。
CASE を使用する場所
繰り返される 3 つの場所:
SELECTで派生列を作成します (上記の例)。ORDER BYで「カスタム」並べ替えの場合:SQLORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name; -- Engineering first, then the rest, alphabetically by last name.- 集計関数内で「条件付きでカウント」します。
このパターン —SQL
SELECT COUNT(*) AS total, SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior, SUM(CASE WHEN salary < 35000 THEN 1 ELSE 0 END) AS junior FROM employees;SUM(CASE WHEN … THEN 1 ELSE 0 END)— が最も一般的です ダッシュボードで使用される「条件付きカウント」。
「コンパクト」なフォルム
単一の式を比較する場合は、より短いバリアントもあります。 正確な値に対して:
CASE department_id
WHEN 1 THEN 'Ingegneria'
WHEN 2 THEN 'Vendite'
ELSE 'Altro'
ENDこれは CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... END と同等ですが、よりコンパクトです。 完全に等しい場合にのみ機能します:
>= または別の比較が必要な場合は、拡張機能に戻る必要があります。
形。
試してみてください
各従業員について、名 (first_name)、姓 (last_name)、および給与が 50000 以上の場合は「Alto」、それ以外の場合は「Standard」である「tier」列を表示します。 3 列、従業員ごとに 1 行。
ヒントを表示
条件は給与 >= 50000 です。必ず END で CASE を閉じ、エイリアス 'tier' を使用してください。
3 回の試行後に解決策が利用可能になります
復習演習
各部門 (Department_id) について、SUM(CASE...) を使用して、高給与 (>= 50000) の従業員の数と標準給与 (< 50000) の従業員の数を数えます。 3 つの列: 部門 ID、高、標準。部門 ID で並べ替えます (最後は NULL)。
ヒントを表示
SUM(CASE WHEN ... THEN 1 ELSE 0 END) パターンは条件付きカウントです。
3 回の試行後に解決策が利用可能になります