zoukankan      html  css  js  c++  java
  • 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 虽然复杂但更为灵活;

  • 相关阅读:
    转载Typora学习笔记
    SpringMVC整体接受前台参数
    基于SSM框架实现oa项目
    Don't know how to iterate over supplied "items" in &lt;forEach&gt;
    springMVC自定义类型转换器(date类型转换)
    springMVC异常处理
    linux服务器基础运维
    什么是服务器
    mysql binlog日志 恢复数据,mysqldump备份
    nginx LVS Haproxy
  • 原文地址:https://www.cnblogs.com/sallyliu/p/6366044.html
Copyright © 2011-2022 走看看