Skip to content

CASE

CASE 语句类似编程语言中的 switch 语句,是 SQL 中的一种条件表达式,可以根据满足的条件返回不同的结果。通常用于 SELECT 查询中对数据进行更加复杂的分组转换。

基本构造

CASE 有两种形式:

SQL
-- 简单 CASE: 基于指定字段的等值判断
CASE column_name
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE resultN
END

-- 复杂 CASE: 基于表达式的条件判断
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE resultN
END

无论哪一种都是在结果为 True 时返回 THEN 后面的结果,结果为 FALSE 是返回 ELSE 后面的结果,可以包含多个 WHEN 分支来提供不同的结果:

SQL
-- 常用案例1: 数据转换
SELECT
    product_id,
    product_name,
    CASE category_id
        WHEN 1 THEN 'Electronics'
        WHEN 2 THEN 'Furniture'
        WHEN 3 THEN 'Clothing'
        ELSE 'Other'
    END AS category_name
FROM
    products;

-- 常用案例2: 数据分组
SELECT
    employee_id,
    salary,
    CASE
        WHEN salary >= 5000 THEN salary * 1.1
        ELSE salary * 1.05
    END AS adjusted_salary
FROM
    employees;

CASE 允许嵌套来实现更加复杂的应用:

SQL
SELECT
    employee_id,
    department_id,
    salary,
    CASE
        WHEN department_id = 1 THEN
            CASE
                WHEN salary > 5000 THEN 'High Salary in Department 1'
                ELSE 'Normal Salary in Department 1'
            END
        WHEN department_id = 2 THEN
            CASE
                WHEN salary > 3000 THEN 'High Salary in Department 2'
                ELSE 'Normal Salary in Department 2'
            END
        ELSE 'Other Department'
    END AS salary_category
FROM
    employees;

注意点

使用有几个注意点:

  1. 通常位于 SELECT 语句中,并且建议使用 AS 重命名
  2. THEN 和 ELSE 后面的结果一定要是同一种或者兼容的数据类型(NULL 也可以)
  3. CASE 不会修改原有的字段内容而是创建了一个新的字段

参考