SQL中Case When的用法

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语句时,需要仔细考虑每个条件的顺序。

数据库标签