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

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

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

查询结果如下:

第二种计算:以性别区分

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

case 函数语法与使用的更多相关文章

  1. Case when 的用法,简单Case函数

    Case when 的用法,简单Case函数 简单CASE表达式,使用表达式确定返回值. 语法: CASE search_expression WHEN expression1 THEN result ...

  2. Swift之函数语法详解

    函数 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被“调用”. Swift 统一的函数语法足够灵活,可以用来表示任何函数 ...

  3. SQL Server -- 回忆笔记(四):case函数,索引,子查询,分页查询,视图,存储过程

    SQL Server知识点回忆篇(四):case函数,索引,子查询,分页查询,视图,存储过程 1. CASE函数(相当于C#中的Switch) then '未成年人' else '成年人' end f ...

  4. CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏

    CASE函数   作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...

  5. Mysql 常用函数(4)- case 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html case 的作用 if 的高级版,类似Java 里 ...

  6. sum 函数语法与应用

    一.sum 函数语法: SELECT SUM(expression )   FROM tables    WHERE predicates; expression 常量.列或函数,或者是算术.按位与字 ...

  7. SQL变量、Substring、charindex、case函数、去除重复

      isnull(aa,0)删除表数据: truncate table aaa 添加字段: ALTER TABLE table1 ADD col1 varchar(200) DEFAULT '2008 ...

  8. Linux下多进程编程之exec函数语法及使用实例

    exec函数族 1)exec函数族说明 fork()函数用于创建一个子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的进程如何执行呢?exec函数族就提供了一个在进程中启动另一个程序执行的 ...

  9. Shell函数语法

    Shell函数语法 定义函数: function   函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名  参数一   参数二 return在函数里面使用会跳出函数并 ...

随机推荐

  1. redis(二)-----redis基本数据类型之字符串

    Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串.哈希.列表.集合.有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLo ...

  2. Hive之同比环比的计算

    Hive系列文章 Hive表的基本操作 Hive中的集合数据类型 Hive动态分区详解 hive中orc格式表的数据导入 Java通过jdbc连接hive 通过HiveServer2访问Hive Sp ...

  3. python2批量改密码

    客户端代码: 如果注释最下面三行socket发送,可以直接在本机修改密码不发送数据到服务端. # -*- coding: utf-8 -*- #author:Guoyabin import rando ...

  4. [自动化]ssh自动化免密访问配置

    ssh简介 SSH(Secure Shell)是一种通信加密协议,加密算法包括:RSA.DSA等 RSA:非对称加密算法,其安全性基于极其困难的大整数的分解(两个素数的乘积): DSA:也是非对称加密 ...

  5. 如何深入学习Java并发编程?

    在讲解深入学习Java并发编程的方法之前,先分析如下若干错误的观点和学习方法. 错误观点1:学习Java编程主要是学习多线程. 这话其实是说明了表面现象,多线程其实还真是并发编程的实现方式,但在实际高 ...

  6. kali linux更新msf 报错Unable to find a spec satisfying metasploit-framework (>= 0) in the set. Perhaps the解决办法

    首先换更新源 :vim  /etc/apt/sources.list deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free co ...

  7. word隐写

    通过打开word选项中显示中的显示隐藏文字即可解决word隐写的问题

  8. SPYEYE手机远程监控和官方SPYEYE间谍软件最新下载方式

    听起来远程控制手机好像很高级的样子,但是实现起来其实非常简单.实现原理如下: 运行程序,让程序不停地读取数据 用手机给手机发送邮件 判断是否读取到指定主题的手机,如果有,则获取手机内容 根据邮件内容, ...

  9. 【C#表达式树 开篇】 Expression Tree - 动态语言

    .NET 3.5中新增的表达式树(Expression Tree)特性,第一次在.NET平台中引入了"逻辑即数据"的概念.也就是说,我们可以在代码里使用高级语言的形式编写一段逻辑, ...

  10. shell脚本编程练习

    转至:http://www.178linux.com/88406 1.写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态 在线的主机使用绿色 ...