SQL中CASE WHEN语句的用法
CASE WHEN语句是SQL中用于条件判断的重要工具,它允许根据指定条件评估表达式并返回不同值。其语法结构灵活,适用于多种数据处理场景。
一、基本语法
CASE WHEN <condition 1> THEN <expression 1> WHEN <condition 2> THEN <expression 2> ... ELSE <default_expression>END二、核心组件
- 条件(Condition)
- 布尔表达式,返回TRUE/FALSE
- 按顺序评估,首个满足的条件会触发对应表达式
- 表达式(Expression)
- 条件为真时返回的值
- 可以是列名、常量、计算表达式或子查询
- 默认表达式(Default_expression)
- 可选部分,所有条件不满足时的返回值
- 省略时默认返回NULL
三、使用步骤
- 确定条件判断逻辑
- 按优先级编写WHEN子句
- 设置ELSE子句(建议保留)
- 用END关键字结束语句
四、典型应用场景
- 数据分类
SELECT product_name, CASE WHEN price > 1000 THEN '高端' WHEN price > 500 THEN '中端' ELSE '经济型' END AS product_levelFROM products;- 动态计算
SELECT employee_name, salary, CASE WHEN performance_score >= 90 THEN salary * 1.2 WHEN performance_score >= 80 THEN salary * 1.1 ELSE salary * 1.05 END AS adjusted_salaryFROM employees;- 数据转换
SELECT order_id, CASE status WHEN 'P' THEN '待付款' WHEN 'S' THEN '已发货' WHEN 'C' THEN '已完成' ELSE '未知状态' END AS status_descFROM orders;- 条件过滤
SELECT student_name, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS gradeFROM students;五、高级用法
- 嵌套CASE语句
SELECT customer_id, CASE WHEN membership_level = 'Gold' THEN CASE WHEN purchase_amount > 1000 THEN 'VIP' ELSE 'Premium' END WHEN membership_level = 'Silver' THEN 'Standard' ELSE 'Basic' END AS service_levelFROM customers;- 在聚合函数中使用
SELECT department, AVG(CASE WHEN gender = 'M' THEN salary END) AS avg_male_salary, AVG(CASE WHEN gender = 'F' THEN salary END) AS avg_female_salaryFROM employeesGROUP BY department;六、注意事项
- 条件评估按顺序进行,首个满足的条件会终止后续判断
- 建议始终包含ELSE子句以确保处理所有情况
- 复杂逻辑可拆分为多个简单CASE语句提高可读性
- 不同数据库对CASE语句的支持可能略有差异
CASE WHEN语句通过条件分支实现SQL查询的逻辑控制,是数据分析和报表生成中不可或缺的工具,合理使用可以显著简化复杂查询逻辑。