在SQL查询中,`CASE WHEN` 是一个非常强大的工具,它允许我们在查询结果中根据不同的条件返回不同的值。这种结构类似于编程语言中的 `if-else` 语句,能够帮助我们实现更加灵活和复杂的逻辑判断。
基本语法
```sql
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
```
- `condition` 是一个布尔表达式。
- `result` 是当条件为真时返回的值。
- `ELSE` 部分是可选的,默认情况下如果所有条件都不满足,则返回 NULL。
实例1:根据分数划分等级
假设有一个学生表 `students`,其中包含学生的成绩字段 `score`。我们需要根据学生的成绩划分等级,例如:
- 90分及以上为“A”
- 80到89分为“B”
- 70到79分为“C”
- 其他情况为“D”
可以通过以下SQL语句实现:
```sql
SELECT
name,
score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END AS grade
FROM students;
```
这个查询将返回每个学生的姓名、成绩以及对应的等级。
实例2:处理空值并赋默认值
在数据库中,某些字段可能会存在空值(NULL)。我们可以使用 `CASE WHEN` 来处理这些空值,并为其赋予一个默认值。例如:
假设有一个订单表 `orders`,其中包含订单的状态字段 `status`。我们希望如果状态为空,则显示为“未确认”,否则显示实际状态。
```sql
SELECT
order_id,
status,
CASE
WHEN status IS NULL THEN '未确认'
ELSE status
END AS confirmed_status
FROM orders;
```
通过这种方式,我们可以确保即使数据中有空值,查询结果也不会出现混乱。
实例3:动态计算字段
有时候,我们需要根据多个条件动态地计算某个字段的值。比如,假设有一个销售表 `sales`,其中包含销售额字段 `amount` 和地区字段 `region`。我们希望根据地区的不同,对销售额进行分类统计。
```sql
SELECT
region,
amount,
CASE
WHEN region = 'North' THEN amount 1.1
WHEN region = 'South' THEN amount 0.9
ELSE amount
END AS adjusted_amount
FROM sales;
```
在这个例子中,我们根据不同地区对销售额进行了调整。北区的销售额增加10%,南区减少10%,其他地区保持不变。
总结
`CASE WHEN` 在SQL中是一种非常实用的功能,它可以帮助我们处理各种复杂的数据逻辑问题。无论是简单的条件判断还是复杂的多条件组合,都可以通过它来实现。熟练掌握这一工具,可以显著提升你的SQL查询能力。
希望以上实例能帮助你更好地理解和应用 `CASE WHEN`!