一:case表达式的用法

1、SQL中的case表达式的作用是用来对“某个变量”进行某种转化,通常在select字句中使用,举个例子:

不能看出,case表达式很像我们的if else的作用,在发现为真的 WHEN 子句时,CASE 表达式的真假值判断就会中止,而剩余的 WHEN 子句会被忽略。case表达式有两种写法:

-- 简单CASE 表达式

CASE sex
   WHEN '1' THEN '男'
   WHEN '2' THEN '女'

ELSE '其他' END

-- 搜索CASE 表达式

CASE WHEN sex = '1' THEN '男'
      WHEN sex = '2' THEN '女'

ELSE '其他' END

注意点:

* else这句非必须但最好带上,如果when中没有符合条件的,且有没有else控制,那么,这样的case会返回null,null不是个好东西,所以你一定要尽量控制减少返回null的情况。

* 简单点说,在能写列名和常量的地方,通常都可以写 CASE 表达式,因为它返回的是一个标量值。

2、使用case实现不同条件的统计:

还是上一个学生表,如果让你查询出各个省份的男生总数和女生总数你会怎么搞呢?

我反正稍加思考,可以想到这样写:

--查看所有学生信息
select StudentID,[Name],Province,Gender,(case Gender
when 0 then N'女'
when 1 then N'男'
else '' end) StuGender
from dbo.T_Student --查询出各省的男女生总数:
select p.Province,sum(p.MaleCount) TotalMale,sum(p.FamaleCount) TotalFamale
from (
select Province, count(1) MaleCount,0 as FamaleCount
from dbo.T_Student
where gender=1
group by Province
union
select Province, 0,count(1) FamaleCount
from dbo.T_Student
where gender=0
group by Province
)as p
group by p.Province

对应的执行结果:

so,可以看到,能实现功能,但是代码却那么长,看着不舒服,这时咱们看看如何用case来拯救世界吧:

--查看所有学生信息
select StudentID,[Name],Province,Gender,(case Gender
when 0 then N'女'
when 1 then N'男'
else '' end) StuGender
from dbo.T_Student --查询出各省的男女生总数:
select Province,
sum(case when Gender=1 then 1 else 0 end ) as MaleCount,
sum(case when Gender=0 then 1 else 0 end ) as FeMaleCount
from dbo.T_Student
group by Province

执行结果:

so,仅仅5行就搞定了,差别很明显,新手where,高手case,good。

3、在update操作中使用case条件分支,比如有个员工表Salaries,工资字段为salary ,

假设现在需要根据以下条件对该表的数据进行更新。

  1. 对当前工资为 30 万日元以上的员工,降薪 10%。

  2. 对当前工资为 25 万日元以上且不满 28 万日元的员工,加薪 20%。

那么更新的SQL语句可以这样写:

-- 用CASE 表达式写正确的更新操作
UPDATE Salaries
SET salary = CASE WHEN salary >= 300000
THEN salary * 0.9
WHEN salary >= 250000 AND salary < 280000
THEN salary * 1.2
ELSE salary END;

** 参考:图灵社区的《SQL进价教程》一书。

SQL进阶1:case表达式的用法示例的更多相关文章

  1. SQL进阶随笔--case用法(一)

    SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...

  2. SQL进阶随笔--case用法(二)

    ---恢复内容开始--- 用 CHECK 约束定义多个列的条件关系 今天来说下check和case的用法.其实,CASE 表达式和 CHECK 约束是很般配的一对组合.也许有很多数据库工程师不怎么用 ...

  3. SQL Server case表达式的用法

    ★CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值.因为CASE是一个标量表达式,所以它可以应用在SELECT.WHERE.HAVING以及ORDER BY子句中. CASE表达式有两种格式 ...

  4. SQL:select case when 的用法

    CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例如,你可以在 WHERE 子句中使用 CASE. 首先让我们看一下 CASE 的语法 ...

  5. 走向面试之数据库基础:二、SQL进阶之case、子查询、分页、join与视图

    一.CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1 WHE ...

  6. 转-sql中的case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  7. sql server中case when的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  8. [转帖]SQL 里面的 case when 的用法

    SQL之case when then else end用法介绍 https://www.2cto.com/database/201804/740772.html 要培训了 看到有case when 之 ...

  9. Oracle的sql语句中case关键字的用法 & 单双引号的使用

    关于sql中单引号和双引号的使用,来一点说明: 1. 查询列的别名如果含有汉字或者特殊字符(如以'_'开头),需要用双引号引起来.而且只能用双引号,单引号是不可以的. 2. 如果想让某列返回固定的值, ...

随机推荐

  1. GMA Round 1 空降

    传送门 空降 在一块100m*100m的平地上,10位战士从天而降!他们每人会均匀随机地落在这个地图上的一个点. 紧随其后,BOSS随机出现在这个地图上的某一点,然后它会奔向位于左上角的出口,而战士们 ...

  2. CSS3_盒子背景

    盒子背景 盒子背景:content    padding    特殊的 boder 背景 背景绘制 从 padding 开始绘制 背景裁剪 background-clip(默认值 border-box ...

  3. Oracle SQL 内置函数大全(转)

    SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ...

  4. 剑指offer——python【第38题】二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 想了很久..首先本渣渣就不太理解递归在python中的实现 ...

  5. tomcat多实例

    //结合博主之前的安装tomcat的博文一起看,tomcat多实例就是在不同路径启动多个tomcat,然后在本机不同端口启动 [root@ycj ~]# cd /usr/local/src/ [roo ...

  6. docker container 互联

    创建一个 network docker network create test-network 创建rocketmq docker run -d  -p 9876:9876 -p 10909:1090 ...

  7. 报文分析3、ICMP协议的头结构

    ICMP协议的头结构 类型(8位) 代码(8位) 校验和(8位) 类型或者代码   (1)类型:一个8位类型字段,表示ICMP数据包类型. (2)代码:一个8位代码域,表示指定类型中的一个功能.如果一 ...

  8. RxSwift 操作符

    RxSwift 操作符 (throttle) https://blog.csdn.net/weixin_38318852/article/details/80334838 RxSwift 操作符 (w ...

  9. Typora极简教程

    Typora极简教程 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档.” ...

  10. jmeter 之 if controller

    jmeter版本5.0.下面是jmeter5.0的if逻辑控制器的截图 标红字体的意思大概是,如果勾选了 下面的 interpret condition as variable expression ...