在 SQL 查询中,`CASE WHEN` 是一个非常实用的条件判断语句,它允许我们在查询结果中根据不同的条件返回不同的值。而 `ELSE` 子句则用于定义当所有 `WHEN` 条件都不满足时的默认值。掌握 `CASE WHEN ELSE` 的用法,能够极大地增强我们对数据进行逻辑处理的能力。
一、基本语法结构
`CASE WHEN` 的基本语法如下:
```sql
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
```
其中:
- `condition1`, `condition2` 等是判断条件;
- `result1`, `result2` 等是符合条件时返回的结果;
- `default_result` 是当所有条件都不满足时返回的默认值。
二、简单示例
假设有一个员工表 `employees`,包含字段 `salary` 和 `department`,我们可以使用 `CASE WHEN` 来为不同部门的员工设置不同的奖金等级:
```sql
SELECT
name,
salary,
CASE
WHEN department = 'Sales' THEN 'High'
WHEN department = 'HR' THEN 'Medium'
WHEN department = 'IT' THEN 'Low'
ELSE 'Unknown'
END AS bonus_level
FROM employees;
```
在这个例子中,每个员工都会根据其所在部门被分配一个奖金等级,如果部门不在指定范围内,则显示“Unknown”。
三、结合 WHERE 子句使用
除了在 SELECT 中使用,`CASE WHEN` 还可以和 `WHERE` 子句配合使用,实现更复杂的筛选逻辑。例如:
```sql
SELECT
name,
salary,
department
FROM employees
WHERE
CASE
WHEN department = 'Sales' THEN salary > 50000
WHEN department = 'IT' THEN salary > 30000
ELSE FALSE
END;
```
此查询将只返回销售部工资高于 5 万或 IT 部工资高于 3 万的员工信息。
四、与聚合函数一起使用
在统计分析中,`CASE WHEN` 常常和 `SUM`, `COUNT`, `AVG` 等聚合函数结合使用,以实现分组统计。例如:
```sql
SELECT
department,
SUM(CASE WHEN salary > 50000 THEN 1 ELSE 0 END) AS high_salary_count
FROM employees
GROUP BY department;
```
该查询统计了每个部门中工资高于 5 万的员工人数。
五、注意事项
1. 顺序问题:`CASE WHEN` 是按顺序判断的,一旦某个条件满足,后面的条件将不再检查。
2. 类型一致性:所有 `THEN` 后的结果应保持数据类型一致,否则可能引发错误。
3. 性能考虑:在大数据量情况下,过度使用 `CASE WHEN` 可能会影响查询效率,建议合理使用索引或优化逻辑。
六、总结
`CASE WHEN ELSE` 是 SQL 中一种强大的条件判断工具,能够帮助我们灵活地处理各种数据逻辑。无论是简单的分类、复杂的数据筛选,还是统计分析,都可以通过它来实现。掌握这一语法,将大大提升你在 SQL 查询中的灵活性和效率。