case 函数语法与使用

Posted 风和日丽2010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 WHEN 应用

学生性别统计student表:

image

 

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

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

 

查询结果如下:

image

 

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

image

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

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` =\'江苏\'

UNION 

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` =\'浙江\'

 

查询结果如下:

image

 

第二种计算:以性别区分

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` ;

 

查询结果如下:

image     

注意:

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

 

查询结果如下:

image

 

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

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

 

查询结果如下:

image

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

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

 

查询结果如下:

image

 

补充:

(1)

select (case province

             when \'浙江\' then \'浙江\' 

             when \'江苏\' then \'江苏\' 

             else province end  ) as 省份 from student;

 

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

image

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

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

如:

image

 

三、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 虽然复杂但更为灵活;

以上是关于case 函数语法与使用的主要内容,如果未能解决你的问题,请参考以下文章

云计算学习路线图素材课件,msyql中CASE WHEN语法

shell脚本—— case语句+函数

流程控制语句-switch选择语句

Oracle Decode()函数和CASE语句的比较

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

sql 中 case when 语法