SQL CASE表达式的用法
- 一、CASE表达式的基础语法
- 简单CASE表达式
- 搜索CASE表达式
- 二、简单CASE表达式的应用示例
- 三、搜索CASE表达式的应用示例
- 四、CASE表达式在聚合函数中的应用
- 五、嵌套CASE表达式的应用
今天在也无力用到了CASE表达式,于是有了这篇博客,CASE表达式是一个极为实用的工具,能帮助开发者实现复杂的条件逻辑判
一、CASE表达式的基础语法
CASE表达式主要有两种语法形式:简单CASE表达式和搜索CASE表达式。
简单CASE表达式
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE result
END
其中,expression
是需要计算的表达式,value1
、value2
等是与expression
进行比较的值,result1
、result2
等是当expression
等于对应值时返回的结果。ELSE result
是可选部分,当expression
不等于任何指定值时返回此结果,若省略则默认返回NULL
。
搜索CASE表达式
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END
这里的condition1
、condition2
等是要计算的条件,result1
、result2
等是当对应条件为真时返回的结果。ELSE result
同样可选,当所有条件都为假时返回,省略时默认返回NULL
。
二、简单CASE表达式的应用示例
假设有一张员工表employees
,包含employee_id
、name
和department_id
字段。我们想根据department_id
显示部门名称。
SELECT
employee_id,
name,
department_id,
CASE department_id
WHEN 1 THEN '销售部'
WHEN 2 THEN '研发部'
WHEN 3 THEN '财务部'
ELSE '其他部门'
END AS department_name
FROM
employees;
通过这个查询,就能将数字形式的department_id
转换为具体的部门名称。
三、搜索CASE表达式的应用示例
继续以employees
表为例,这次我们想根据员工的薪资范围来划分薪资等级。
SELECT
employee_id,
name,
salary,
CASE
WHEN salary >= 10000 THEN '高薪资'
WHEN salary >= 5000 THEN '中等薪资'
ELSE '低薪资'
END AS salary_level
FROM
employees;
利用搜索CASE表达式,依据不同的薪资条件判断出薪资等级。
四、CASE表达式在聚合函数中的应用
假设我们要统计不同薪资等级的员工人数。
SELECT
SUM(CASE
WHEN salary >= 10000 THEN 1
ELSE 0
END) AS high_salary_count,
SUM(CASE
WHEN salary >= 5000 THEN 1
ELSE 0
END) AS medium_salary_count,
SUM(CASE
WHEN salary < 5000 THEN 1
ELSE 0
END) AS low_salary_count
FROM
employees;
在聚合函数SUM
中结合CASE表达式,实现了对不同薪资等级员工人数的统计。
五、嵌套CASE表达式的应用
当遇到更为复杂的条件判断时,可以使用嵌套CASE表达式。比如,在统计员工绩效时,先判断是否完成基本任务量,再根据完成的超额比例进行细分。
SELECT
employee_id,
name,
task_completion,
CASE
WHEN task_completion >= 100 THEN
CASE
WHEN task_completion >= 150 THEN '卓越'
WHEN task_completion >= 120 THEN '优秀'
ELSE '良好'
END
ELSE '待提高'
END AS performance_level
FROM
employees;
通过这种嵌套方式,能处理多维度的条件判断。