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. traceroute实用命令总结

    在工作中,我们经常会使用到traceroute进行追踪路由,从而判断网络的故障点,或者网络策略限制等原因.对于网络排查traceroute还是有很大用处的. 一.traceroute常用命令参数 用法 ...

  2. 定制Centos7.9镜像

    Ps:因为工作内容:有一部份是需要重装系统:系统版本镜像为centos7.9.可每次装完都需要下载一些基础包:最近因为设备过多:网卡名称太乱:导致做后续配置太繁琐:不规整:索性自己定制个系统: 搭建基 ...

  3. 多表查询思路、navicat可视化软件、python操作MySQL、SQL注入问题以及其他补充知识

    昨日内容回顾 外键字段 # 就是用来建立表与表之间的关系的字段 表关系判断 # 一对一 # 一对多 # 多对多 """通过换位思考判断""" ...

  4. Ubuntu20.04 Focal Cloudimage扩容以及KVM安装的问题记录

    运行Ubuntu20.04的KVM虚机遇到一些问题, 单独总结一下 镜像扩容 不能用virt-resize --expand /dev/sda1 old.qcow2 new.qcow2这样的命令, 这 ...

  5. SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分库分表实践

    一.序言 在实际业务中,单表数据增长较快,很容易达到数据瓶颈,比如单表百万级别数据量.当数据量继续增长时,数据的查询性能即使有索引的帮助下也不尽如意,这时可以引入数据分库分表技术. 本文将基于Spri ...

  6. 【C# 线程】IntPtr 类

    IntPtr类由来 .NET提供了一个结构体System.IntPtr专门用来代表句柄或指针.句柄是对象的标识符,当调用这些API创建对象时,它们并不直接返回指向对象的指针,而是会返回一个32位或64 ...

  7. 论文解读(GIN)《How Powerful are Graph Neural Networks》

    Paper Information Title:<How Powerful are Graph Neural Networks?>Authors:Keyulu Xu, Weihua Hu, ...

  8. Python:绘图添加中文标题

    (20条消息) Python绘图如何显示中文标题_wulei_1107103372的博客-CSDN博客_python画图中文标题 plt.rcParams['font.sans-serif'] = [ ...

  9. Java:命令行参数的传入和调用

    1.传入 传入时机:执行时 格式: //编译 javac Main.java //执行并传入命令行参数 -version java Main -version 此时,参数-version就以Strin ...

  10. linux多进/线程编程(5)——进程间通信之mmap

    参考资料: 1.博客1:https://www.jianshu.com/p/755338d11865 mmap:一种内存映射文件的方法 memory map 父子进程和无亲缘关系的进程,都可以将自身用 ...