千家信息网

case 函数语法与使用

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,case 函数是聚合函数的一种,为统计函数。case表达式:CASE selector WHEN value1 THEN action1; WHEN value2 THEN a
千家信息网最后更新 2024年09月22日case 函数语法与使用

case 函数是聚合函数的一种,为统计函数。

case表达式:

CASE  selector      WHEN value1 THEN action1;       WHEN value2 THEN action2;       WHEN value3 THEN action3

一、CASE WHEN 表达式有两种形式

(1)简单Case函数

CASE  sex  WHEN '1' THEN '男'  WHEN '2' THEN '女'  ELSE '其他' END

(2)Case搜索函数

CASE   WHEN sex = '1' THEN '男'  WHEN sex = '2' THEN '女'  ELSE '其他' END

本篇文章未讲解关于case 搜索函数用法。


二、CASE WHEN 应用

学生性别统计student表:

------------查询表中所有的性别

select  ID,        (case sex          when '1' then '男'         when '2' then '女'        ELSE 'null'         END) AS  '性别',         province as '省份'    from `student`   ORDER BY `ID` ASC ;

查询结果如下:

-------------查询江苏省与浙江省男生与女生个数分别是多少。

第一种计算方法:以省份区分

select province AS '江苏省',           COUNT(case sex when '男' THEN  '男'                      ELSE  null END ) AS  '男生',            COUNT(case sex                                 when '女' THEN '女'               ELSE  null END ) AS  '女生'    from student where `province` ='江苏'UNIONselect province AS '江苏省',           COUNT(case sex  when '男' THEN  '男'                           ELSE  null END ) AS  '男生',            COUNT(case sex                           when '女' THEN  '女'                           ELSE  null END ) AS  '女生'    from `student`  where `province` ='浙江'

查询结果如下:

第二种计算:以性别区分

select sex,                   COUNT(case province                          when '江苏' THEN  '江苏'                           ELSE  null END ) AS  '江苏省',    COUNT(case province                      when '浙江' THEN  '浙江'                       ELSE  null END ) AS  '浙江省'    from  `student` group by  `sex` ;

查询结果如下:

注意:

COUNT(case province      when '江苏' THEN  '江苏'        ELSE  null END ) AS  '江苏省',


可以简写成:

COUNT( case province when '江苏' THEN  '江苏' END ) AS '江苏省'


----------查询各省份的男女数量

select province ,       sex,        COUNT(*) AS  '总数'    from  student  GROUP BY province ,sex;

查询结果如下:


----------只统计了浙江省的男女数目

select       sex ,         province,          count(case province when '江苏' then '江苏' end )as '数量'     from student group by province, sex;

查询结果如下:


当数据较多时,使用以上数据查询占用大量的资源,因此可以简单写成以下形式:

select  sex as '性别' ,            count(case province when '江苏' then '江苏' end )as '浙江省'     from student group by sex;

查询结果如下:

补充:

(1)select (case province             when '浙江' then '浙江'             when '江苏' then '江苏'             else province end  ) as 省份 from student;


else province 默认为除浙江、江苏 外显示其他城市


(2) case when 可以跟不相等的判断。

可用于=,>=,<,<=,<>,is null,is not null 等的判断。

如:


三、CASE WHEN 与 DECODE 比较

1,DECODE Oracle 特有;
2,CASE WHEN Oracle , SQL Server, MySQL 都可用;
3,DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,

CASE 可用于=,>=,<,<=,<>,is null,is not null 等的判断;

4,DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;


0