> 技术文档 > SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法

SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法


SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法

CASE WHEN 是 SQL 中非常实用的条件表达式,它允许你在查询中实现条件逻辑。以下是详细的用法说明:

1. 基本语法结构

CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_resultEND

或者简单形式:

CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_resultEND

2. 在 SELECT 语句中的用法

示例1:简单条件判断

SELECT employee_name, salary, CASE WHEN salary > 10000 THEN \'高薪\' WHEN salary > 5000 THEN \'中等\' ELSE \'一般\' END AS salary_levelFROM employees;

示例2:等值比较(简单形式)

SELECT product_name, CASE category_id WHEN 1 THEN \'电子产品\' WHEN 2 THEN \'服装\' WHEN 3 THEN \'食品\' ELSE \'其他\' END AS category_nameFROM products;

3. 在 UPDATE 语句中的用法

UPDATE ordersSET discount = CASE WHEN order_amount > 1000 THEN 0.1 WHEN order_amount > 500 THEN 0.05 ELSE 0 END;

4. 在 ORDER BY 中的用法

SELECT * FROM customersORDER BY CASE WHEN country = \'China\' THEN 1 WHEN country = \'USA\' THEN 2 ELSE 3 END;

5. 在 GROUP BY 中的用法

SELECT CASE WHEN age < 20 THEN \'青少年\' WHEN age BETWEEN 20 AND 30 THEN \'青年\' ELSE \'成年\' END AS age_group, COUNT(*) AS countFROM usersGROUP BY age_group;

6. 嵌套 CASE WHEN 用法

SELECT student_name, score, CASE WHEN score >= 90 THEN \'A\' WHEN score >= 80 THEN CASE  WHEN attendance_rate > 0.9 THEN \'B+\' ELSE \'B\' END WHEN score >= 70 THEN \'C\' ELSE \'D\' END AS gradeFROM students;

7. 在聚合函数中使用

SELECT department_id, SUM(CASE WHEN gender = \'M\' THEN 1 ELSE 0 END) AS male_count, SUM(CASE WHEN gender = \'F\' THEN 1 ELSE 0 END) AS female_countFROM employeesGROUP BY department_id;

注意事项

  1. CASE WHEN 会按顺序判断条件,第一个满足的条件会被执行,后面的条件将被忽略
  2. 如果没有条件满足且没有 ELSE 子句,结果将为 NULL
  3. 所有 THEN 子句返回的数据类型应该兼容
  4. 在复杂的 CASE 表达式中,适当使用括号可以提高可读性

CASE WHEN 是 SQL 中非常强大的条件表达式,掌握它可以让你写出更加灵活和强大的查询语句。