一、MySQL case when的三种用法:


1.case 字段 when, 字段的具体值;

select a.*,
case sex
when '1' then '男'
else '女'
end as '性别'
FROM table_sex a;

2.case when 字段,可对字段进行取值范围设置;

SELECT a.*,
CASE
WHEN a.age BETWEEN 0 and 20 THEN '青年'
WHEN a.age BETWEEN 20 and 40 THEN '中年'
ELSE '非人类'
END AS '描述'
FROM table_c a;

3.case when 字段1,字段2,可对多个字段进行取值映射;

SELECT a.*,
CASE
WHEN a.age BETWEEN 20 and 80 THEN '青年'
WHEN a.name ='流浪' THEN '帅气'
END AS '描述'
FROM table_cc a

注:如果两个条件都针对一个字段的话,会显示第一个when的值。


二、具体解释:

SELECT
case -------------如果
  when sex='' then '男' -------------sex='1',则返回值'男'
  when sex='' then '女' -------------sex='2',则返回值'女'
   else 0 -------------其他的返回'其他’
end -------------结束
from sys_user --------整体理解: 在sys_user表中如果sex='1',则返回值'男'如果sex='2',则返回值'女' 否则返回'其他’

三、例子

有员工表如下:

empinfo (
  Fempno varchar2(10) not null pk,
  Fempname varchar2(20) not null,
  Fage number not null,
  Fsalary number not null
);

假如数据量很大约1000万条;

写一个你认为最高效的SQL,用一个SQL计算以下四种人:

  • fsalary>9999 and fage > 35
  • fsalary>9999 and fage < 35
  • fsalary <9999 and fage > 35
  • fsalary <9999 and fage < 35

每种员工的数量

SELECT
SUM(CASE WHEN fsalary > 9999 AND fage > 35 THEN 1 ELSE 0 END)
AS "fsalary>9999_fage>35",
SUM(CASE WHEN fsalary > 9999 AND fage < 35 THEN 1 ELSE 0 END)
AS "fsalary>9999_fage<35",
SUM(CASE WHEN fsalary < 9999 AND fage > 35 THEN 1 ELSE 0 END)
AS "fsalary<9999_fage>35",
SUM(CASE WHEN fsalary < 9999 AND fage < 35 THEN 1 ELSE 0 END)
AS "fsalary<9999_fage<35"
FROM empinfo;

END 2018-05-16 14:30:48

MySQL学习笔记:case when的更多相关文章

  1. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  2. 一千行MySQL学习笔记 (转)

    出处:  一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...

  3. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  4. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  5. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  6. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  7. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  8. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  9. MySQL学习笔记-锁相关话题

    在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因.   Mysql常用存储引擎的锁 ...

  10. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

随机推荐

  1. C++中#define用法

    http://blog.sina.com.cn/s/blog_686188ef0100klku.html #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一 ...

  2. Chapter9(顺序容器) --C++Prime笔记

    PS:删除元素的成员函数并不检查其参数.在删除元素之前,程序员必须确保它们是存在的. 1.迭代器的范围是[begin,end)左闭右开. 2.对构成迭代器的要求: ①它们指向同一个容器中的元素或者容器 ...

  3. 完美解决github访问速度慢

    1. 解决方法 2.解决方法 1. 修改本地hosts文件 windows系统的hosts文件的位置如下:C:\Windows\System32\drivers\etc\hosts mac/linux ...

  4. SourceTree免密克隆仓库及问题说明

    前言说明: 公司陆陆续续进新员工,新员工都需要了解公司各类资料,而公司资料都存储于gitlab中,因此,新员工需要安装工具进行资料拉取. 公司采用SourceTree的是工具.相关下载地址如下: WI ...

  5. ZeroMQ API(三) 消息

    1.初始化消息 1.1 zmq_msg_init(3) 1.1.1 名称 zmq_msg_init - 初始化空的ZMQ消息 1.1.2 概要 int zmq_msg_init(zmq_msg_t * ...

  6. Linux装机利器Cobbler安装配置

     Linux装机利器Cobbler安装配置 2011-05-27 15:31:05 分类: LINUX 一.安装环境 centos 5.4 关掉iptables 关掉 selinux selinux ...

  7. 《设计模式》-原则三:依赖倒置原则(DIP)

    这几天晚上回来都去玩了!没有坚持学习.真的好惭愧! 非常自责 后面一定要坚持 一气呵成  争取每天学一点,把这个学完. 今天主要是看了一下  设计模式中的 原则三: 依赖倒置原则(DIP) 官方是这样 ...

  8. 谁说码农不懂浪漫?(js写的'老婆生日快乐'特效)

    一直被老婆抱怨不懂浪漫,老婆的生日又来了,老婆指着闺蜜空间上贴的老公做的胡萝卜心形浪漫晚餐告诉我:必须送她一份用心的礼物.我绞尽脑汁想出这么一法子,还是得用我们码农的独特方式,经过一天多的努力,终于做 ...

  9. codeforces997C Sky full of stars

    传送门:http://codeforces.com/problemset/problem/997/C [题解] 注意在把$i=0$或$j=0$分开考虑的时候,3上面的指数应该是$n(n-j)+j$ 至 ...

  10. 转 -- ARM 中 LDR伪指令

    我们知道ARM CPU中有一条被广泛使用的指令LDR,它主要是用来从存储器(确切地说是地址空间)中装载数据到通用寄存器.但不论是ARMASM还是GNU ARM AS,都提供了一条与之同名的伪指令LDR ...