SQL CASE表达式的用法

发布于:2025-02-17 ⋅ 阅读:(163) ⋅ 点赞:(0)

今天在也无力用到了CASE表达式,于是有了这篇博客,CASE表达式是一个极为实用的工具,能帮助开发者实现复杂的条件逻辑判

一、CASE表达式的基础语法

CASE表达式主要有两种语法形式:简单CASE表达式和搜索CASE表达式。

简单CASE表达式

CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
  ...
    ELSE result
END

其中,expression是需要计算的表达式,value1value2等是与expression进行比较的值,result1result2等是当expression等于对应值时返回的结果。ELSE result是可选部分,当expression不等于任何指定值时返回此结果,若省略则默认返回NULL

搜索CASE表达式

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
  ...
    ELSE result
END

这里的condition1condition2等是要计算的条件,result1result2等是当对应条件为真时返回的结果。ELSE result同样可选,当所有条件都为假时返回,省略时默认返回NULL

二、简单CASE表达式的应用示例

假设有一张员工表employees,包含employee_idnamedepartment_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;

通过这种嵌套方式,能处理多维度的条件判断。


网站公告

今日签到

点亮在社区的每一天
去签到