温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

case 函数语法与使用

发布时间:2020-07-15 10:47:22 来源:网络 阅读:1856 作者:静水流深li 栏目:软件技术

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表:

case 函数语法与使用

 

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

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

查询结果如下:

case 函数语法与使用

 

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

case 函数语法与使用

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

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

查询结果如下:

case 函数语法与使用

 

第二种计算:以性别区分

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

查询结果如下:

case 函数语法与使用   

  

注意:

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;

查询结果如下:

case 函数语法与使用    

 

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

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

查询结果如下:

case 函数语法与使用    

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

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

查询结果如下:

case 函数语法与使用

 

补充:

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

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

case 函数语法与使用


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

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

如:

case 函数语法与使用


 

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI