sql中case when语句的用法

大哥大姐帮我讲解下,sql中case when语句的用法
最新回答
何必太在乎你

2026-07-02 11:18:10

SQL中CASE WHEN语句的用法

CASE WHEN语句是SQL中用于条件判断的重要工具,它允许根据指定条件评估表达式并返回不同值。其语法结构灵活,适用于多种数据处理场景。

一、基本语法

CASE WHEN <condition 1> THEN <expression 1> WHEN <condition 2> THEN <expression 2> ... ELSE <default_expression>END

二、核心组件

  1. 条件(Condition)
  • 布尔表达式,返回TRUE/FALSE
  • 按顺序评估,首个满足的条件会触发对应表达式
  1. 表达式(Expression)
  • 条件为真时返回的值
  • 可以是列名、常量、计算表达式或子查询
  1. 默认表达式(Default_expression)
  • 可选部分,所有条件不满足时的返回值
  • 省略时默认返回NULL

三、使用步骤

  1. 确定条件判断逻辑
  2. 按优先级编写WHEN子句
  3. 设置ELSE子句(建议保留)
  4. 用END关键字结束语句

四、典型应用场景

  1. 数据分类
SELECT product_name, CASE WHEN price > 1000 THEN '高端' WHEN price > 500 THEN '中端' ELSE '经济型' END AS product_levelFROM products;
  1. 动态计算
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;
  1. 数据转换
SELECT order_id, CASE status WHEN 'P' THEN '待付款' WHEN 'S' THEN '已发货' WHEN 'C' THEN '已完成' ELSE '未知状态' END AS status_descFROM orders;
  1. 条件过滤
SELECT student_name, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS gradeFROM students;

五、高级用法

  1. 嵌套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;
  1. 在聚合函数中使用
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;

六、注意事项

  1. 条件评估按顺序进行,首个满足的条件会终止后续判断
  2. 建议始终包含ELSE子句以确保处理所有情况
  3. 复杂逻辑可拆分为多个简单CASE语句提高可读性
  4. 不同数据库对CASE语句的支持可能略有差异

CASE WHEN语句通过条件分支实现SQL查询的逻辑控制,是数据分析和报表生成中不可或缺的工具,合理使用可以显著简化复杂查询逻辑。