CASE WHEN语句是一种SQL中的条件语句,它允许根据指定的条件对数据进行分类和筛选。其语法格式为:
```sql
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
...
ELSE 默认结果
END
```
其中,条件是布尔表达式,如果条件为真,则返回相应的结果;如果所有条件都不满足,则返回默认结果。
基本用法
CASE WHEN语句的基本用法是将数据分类到不同的类别中。例如,以下语句将表中的性别列分类为“男”和“女”:
```sql
SELECT CASE WHEN Gender = 'M' THEN 'Male'
WHEN Gender = 'F' THEN 'Female'
ELSE 'Unknown'
END AS GenderCategory
FROM table_name
```
布尔表达式
条件可以是任何布尔表达式,包括比较运算符、逻辑运算符和函数。例如,以下语句根据年龄将数据分类为“儿童”、“青少年”和“成人”:
```sql
SELECT CASE
WHEN Age < 13 THEN 'Child'
WHEN Age >= 13 AND Age < 18 THEN 'Teenager'
WHEN Age >= 18 THEN 'Adult'
ELSE 'Unknown'
END AS AgeCategory
FROM table_name
```
多个条件
CASE WHEN语句可以处理多个条件。条件可以连接在一起,使用AND和OR运算符。例如,以下语句根据性别和年龄将数据分类为六个类别:
```sql
SELECT CASE
WHEN Gender = 'M' AND Age < 18 THEN 'Young Male'
WHEN Gender = 'M' AND Age >= 18 THEN 'Adult Male'
WHEN Gender = 'F' AND Age < 18 THEN 'Young Female'
WHEN Gender = 'F' AND Age >= 18 THEN 'Adult Female'
ELSE 'Unknown'
END AS PersonCategory
FROM table_name
```
嵌套CASE WHEN语句
CASE WHEN语句可以嵌套,以创建更复杂的分类结构。例如,以下语句根据性别和收入将数据分类为八个类别:
```sql
SELECT CASE
WHEN Gender = 'M' THEN
CASE
WHEN Income < 50000 THEN 'Low-Income Male'
WHEN Income >= 50000 AND Income < 100000 THEN 'Middle-Income Male'
ELSE 'High-Income Male'
END
WHEN Gender = 'F' THEN
CASE
WHEN Income < 50000 THEN 'Low-Income Female'
WHEN Income >= 50000 AND Income < 100000 THEN 'Middle-Income Female'
ELSE 'High-Income Female'
END
ELSE
'Unknown'
END AS IncomeCategory
FROM table_name
```
CASE ELSE语句
CASE ELSE语句可以指定默认结果,当所有条件都不满足时返回。例如,以下语句将所有不满足性别和年龄条件的数据分类为“其他”:
```sql
SELECT CASE
WHEN Gender = 'M' AND Age < 18 THEN 'Young Male'
WHEN Gender = 'M' AND Age >= 18 THEN 'Adult Male'
WHEN Gender = 'F' AND Age < 18 THEN 'Young Female'
WHEN Gender = 'F' AND Age >= 18 THEN 'Adult Female'
ELSE 'Other'
END AS PersonCategory
FROM table_name
```
筛选数据
CASE WHEN语句不仅可以分类数据,还可以筛选数据。通过在CASE END语句后添加WHERE子句,可以只返回满足特定条件的数据。例如,以下语句只返回收入超过100000美元的男性:
```sql
SELECT
FROM table_name
WHERE CASE
WHEN Gender = 'M' THEN Income > 100000
ELSE FALSE
END
```
优势
CASE WHEN语句具有以下优势:
易于使用和理解
灵活,可以处理各种分类和筛选需求
提高查询性能,因为它可以一次性执行多个条件
局限性
CASE WHEN语句也有一些局限性:
条件太复杂时可读性较差
嵌套太深时可能会导致性能问题
对于非常大的数据集,可能需要更有效的解决方案