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. JTAG 标准IEEE STD 1149.1-2013学习笔记(一·)Test logic architecture、Instruction register以及Test data registers

    我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和SOC设计. 关注公众号[集成电路设计教程],拉你进"IC设计交流群". 注:转载请注明出处 一.Test logic ...

  2. Solution -「CF 848D」Shake It!

    \(\mathcal{Description}\)   Link.   初始有一个有向图 \(G=(V,E)\),\(V=\{s,t\}\),\(E=\langle s,t\rangle\),一次操作 ...

  3. NVDA、争渡读屏语音开放API接口

    什么是读屏软件? 读屏软件是一种专为视力障碍人士设计的,能够辅助视障人士操作计算机的工具,它可以将屏幕上显示的内容用语音朗读出来,这样视障人士就可以正常使用电脑了. 知名的屏幕阅读软件国内有争渡读屏. ...

  4. 怎么说服领导,能让我用DDD架构肝项目?

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/ezd-6xkRiNfPH1lGwhLd8Q 沉淀.分享.成长,让自己和他人都能 ...

  5. jenkins pipeline构建项目

    以前用的jenkins自由风格发布代码.界面丑陋,出现问题位置不够清晰.今天改进一下流程使用jenkins pipeline构建项目. 学习使我快乐 步骤一.安装pipeline插件 点击系统管理-& ...

  6. MYSQL文件复制及备份

    周末研究了下mysql的数据结构,记录下: 场景1:当从一台电脑的mysql的data中复制数据库的文件夹到另一台电脑上时会发现 表不存在,函数等也不存在 方法:1.需要将data根目录下的ibdat ...

  7. Java线程池进阶

    线程池是日常开发中常用的技术,使用也非常简单,不过想使用好线程池也不是件容易的事,开发者需要不断探索底层的实现原理,才能在不同的场景中选择合适的策略,最大程度发挥线程池的作用以及避免踩坑. 一.线程池 ...

  8. ESP32-S3 arduino 开发环境搭建

    ESP32-S3 arduino 简要描述 在github上搜索arduino-esp32,找到并打开espressif/arduino-esp32仓库,从master主分支切换到esp32-s3-s ...

  9. 什么是Ajax?全面了解

    一:Ajax 引入Ajax: 我们知道,前端页面想要和后端进行数据交互,可以通过以下方式 将参数添加到url中,后端通过get方式从url中获取数据 GET请求 前端页面通过form表单,将数据以ge ...

  10. 企业必读:BI数据可视化工具选型

    伴随着大数据时代的到来,企业对数据的需求从"IT主导的报表模式"转向"业务主导的自助分析模式",可视化BI工具也随之应运而生.面对如此众多的可视化BI工具,我们 ...