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;
注意点
使用有几个注意点:
- 通常位于 SELECT 语句中,并且建议使用 AS 重命名
- THEN 和 ELSE 后面的结果一定要是同一种或者兼容的数据类型(NULL 也可以)
- CASE 不会修改原有的字段内容而是创建了一个新的字段