1. 概述
Case When是SQL中条件语句的一种,它允许根据满足一定条件来执行不同的操作。Case When语句基本的语法格式如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
其中,condition1, condition2, ..., conditionN是要判断的条件,result1, result2, ..., resultN是与条件匹配的结果,ELSE子句是为了处理任何不能与条件匹配的情况。
2. 语法详解
2.1 基本语法
Case When语句中的每个WHEN子句都是一组完整的条件,其格式如下:
WHEN condition THEN result
condition是一个布尔表达式,当它为真(True)时返回result。如果condition为空,则result将被返回。如果没有满足任何WHEN子句中的条件,则ELSE子句中的result将被返回。对于简单的表达式(如字段值),它们也可以用作条件。例如:
SELECT COUNT(*) AS GenderCount,
CASE gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
END AS Gender
FROM Employees
GROUP BY gender;
上述代码可以将Employees表中的M和F替换为Male和Female,并计算每个性别的计数。
2.2 多个条件
Case When语句可以对多个条件进行测试。在这种情况下,可以使用AND或OR运算符将多个条件组合在一起。例如:
SELECT Name,
CASE
WHEN age >= 18 AND age <= 60 THEN 'Adult'
WHEN age > 60 THEN 'Senior'
WHEN age < 18 THEN 'Child'
END AS AgeGroup
FROM Employees;
上述代码将Employees表中的年龄分成三组(儿童、成年人、老年人),并将它们保存在名为AgeGroup的新列中。
2.3 嵌套
可以在Case When语句中嵌套另一个条件语句。例如:
SELECT Name,
CASE
WHEN age < 18 THEN 'Child'
ELSE
CASE
WHEN age <= 60 THEN 'Adult'
WHEN age > 60 THEN 'Senior'
END
END AS AgeGroup
FROM Employees;
上述代码将年龄分成三组(儿童、成年人、老年人),并将它们保存在名为AgeGroup的新列中。如果年龄小于18岁,则在“儿童”中分配;否则,继续测试,如果年龄小于等于60,则在“成年人”中分配;否则,在“老年人”中分配。
3. 示例
3.1 案例一
查询出Employees表中Salary的信息,如果Salary小于等于2000,显示为Low Salary,如果Salary大于2000且小于等于5000,显示为Middle Salary,如果Salary大于5000,显示为High Salary。
SELECT Name, Salary,
CASE
WHEN salary <= 2000 THEN 'Low Salary'
WHEN salary > 2000 AND salary <= 5000 THEN 'Middle Salary'
WHEN salary > 5000 THEN 'High Salary'
END AS SalaryLevel
FROM Employees;
上述代码将Employees表中的Salary分为三组(低薪、中薪、高薪),并将它们保存在名为SalaryLevel的新列中。
3.2 案例二
查询出Employees表中工资等级的信息,工资等级的计算规则为:根据Salary进行降序排序,前1/3为High、中间1/3为Middle、后1/3为Low。
SELECT Name, Salary,
CASE
WHEN salary >= (SELECT MAX(salary) FROM Employees) / 3 * 2 THEN 'High'
WHEN salary >= (SELECT MAX(salary) FROM Employees) / 3 THEN 'Middle'
ELSE 'Low'
END AS SalaryLevel
FROM Employees
ORDER BY Salary DESC;
上述代码将Employees表中的Salary分为三组(高薪、中薪、低薪),并将它们保存在名为SalaryLevel的新列中,此处用到了子查询。
3.3 案例三
查询出Employees表中年龄和性别的信息,将性别汉字化,并将年龄分为婴儿、儿童、青少年、成年人、中年人、老年人等六组。
SELECT Name, Gender, Age,
CASE gender
WHEN 'M' THEN '男性'
WHEN 'F' THEN '女性'
END AS GenderStr,
CASE
WHEN age <= 1 THEN '婴儿'
WHEN age > 1 AND age <= 12 THEN '儿童'
WHEN age > 12 AND age <= 18 THEN '青少年'
WHEN age > 18 AND age <= 45 THEN '成年人'
WHEN age > 45 AND age <= 60 THEN '中年人'
ELSE '老年人'
END AS AgeStr
FROM Employees;
上述代码将Employees表中的年龄和性别分为六组,并将它们保存在名为AgeStr和GenderStr的新列中,年龄的组别可以根据实际需要自行定义。
总结
Case When语句是SQL中条件语句的一种,可以根据不同的条件来执行不同的操作。Case When语句可以对多个条件进行测试,在Case When语句中嵌套另一个条件语句。在使用Case When语句时,需要仔细考虑每个条件的顺序。