SQL:case函数的详细用法

时间:2025-04-08 19:28:58

CASE 函数可以用于对数据进行复杂的条件判断和转换,在数据清洗和处理过程中具有重要的作用。它允许您根据给定的条件对一个或多个表达式进行条件判断,并返回相应的结果。分为:

1. 简单CASE函数

它的语法如下:

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

这里的expression是您要检查的表达式,value1、value2等是可能的值,result1、result2等是对应的结果。如果expression的值等于某个值,CASE函数将返回对应的结果。

2. 搜索CASE函数

它的语法如下:

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

这里的condition1、condition2等是条件,result1、result2等是对应的结果。第一个满足的条件将被返回。如果没有任何条件满足,ELSE子句中的默认结果将被返回。

3. 常见使用场景

例1: 查询班级表中的学生的班号、班名、系号和班主任号,并对系号作如下处理:
当系号为1时,显示 “计算机系”;
当系号为2时,显示 “软件工程系”;
当系号为3时,显示 “物联网系”。

简单case函数:

SELECT
    班号,
    班名,
    CASE
        系号
        WHEN 1 THEN '软件工程系'
        WHEN 2 THEN '计算机系'
        WHEN 3 THEN '物联网系'
    END AS 系号,
    班主任号
FROM
    班级表

搜索case函数: 

SELECT
    班号,
    班名,
    CASE
        WHEN 系号 = 1 THEN '软件工程系'
        WHEN 系号 = 2 THEN '计算机系'
        WHEN 系号 = 3 THEN '物联网系'
    END AS 系号,
    班主任号
FROM
    班级表

例2.统计每个班男生和女生的数量各是多少,统计结果的表头为:班号,男生数量,女生数量。

SELECT
    班号,
    COUNT(
        CASE
            WHEN 性别 = '男' THEN '男'
        END
    ) 男生数,
    COUNT(
        CASE
            WHEN 性别 = '女' THEN '女'
        END
    ) 女生数
FROM
    学生表
GROUP BY
    班号

例3.判断成绩的等级,85-100为“优”,70-84为“良”,60-69为“及格”,60以下为“不及格”,并统计每一等级的人数。

SELECT
    CASE
        WHEN GRADE BETWEEN 85 AND 100  THEN '优'
        WHEN GRADE BETWEEN 70 AND 84  THEN '良'
        WHEN GRADE BETWEEN 60 AND 69  THEN '及格'
        ELSE '不及格'
    END 等级,
    COUNT(*) 人数
FROM
    SC
GROUP BY
    CASE
        WHEN GRADE BETWEEN 85 AND 100  THEN '优'
        WHEN GRADE BETWEEN 70 AND 84  THEN '良'
        WHEN GRADE BETWEEN 60 AND 69  THEN '及格'
        ELSE '不及格'
    END

或

SELECT
    grade AS '等级',
    count(*) AS '人数'
FROM
    (
        SELECT
            CASE
                WHEN GRADE BETWEEN 85 AND 100  THEN '优'
                WHEN GRADE BETWEEN 70 AND 84  THEN '良'
                WHEN GRADE BETWEEN 60 AND 69  THEN '及格'
                ELSE '不及格'
            END AS grade
        FROM
            SC
    ) a
GROUP BY
    grade