Case when的用法
Case when 的用法: 一旦满足了某一个WHEN, 则这一条数据就会退出CASE WHEN , 而不再考虑 其他CASE;
Case when 的用法
-- 搜索Case函数:
Case函数(Case搜索函数): 判断表达式的真假,如果为真,返回结果;如果为假,返回else值;如果未定义else值,则返回空值(使用条件确定返回值);
select name,id,(case when id=34 then salary*2
when id=45 then salary*3
else salary
end) new_salary
from semp;
-- 简单Case函数
简单Case表达式的作用是: 使用表达式确定返回值:
select id,name,(case sex
when '1' then '男'
when '2' then '女'
else '其他' end)
from student;
这两种方法可以实现相同的功能. 简单Case函数的写法比较简单,但是和case搜索函数相比,功能方面会有些限制,比如判断式.
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略.
比如下面 SQL,将无法得到第二个结果:(差永远获取不到)
sql如下
case when colum in ('a', 'b') then '优秀'
when colum in ('a') then '差'
else '其他' end
下面我们来看一下,使用Case函数都能做些什么事情 .
1. 已知数据按照另一种方式进行分组 ,分析
有如下数据:(为了看的更清楚 ,我并没有使用国家代码, 而是直接用国家名作为 Primary Key)
同样我们也可以用这个方法来判断工资等级, 并统计出来每一等级的人数. SQL如下
SELECT
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class, -- 别名命名
COUNT(*) FROM salary
GROUP BY
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END;
2. 用一个SQL语句完成不同条件的分组 .
有如下数据:
按照国家和性别进行分组 , 得出结果如下:
代码
SELECT country,
SUM(CASE WHEN sex = '1' THEN population ELSE 0 END) as '男', -- 男性人口
SUM(CASE WHEN sex = '2' THEN population ELSE 0 END) as '女'-- 女性人口
FROM citys GROUP BY country;
3. 在Check中使用Case函数 .
SQL 中 Check 约束用于限制列中的值得范围 .
如果对单个列定义Check约束 , 那么该列只允许特定的值 .
如果对一个表定义Check约束 , 那么此约束会基于行中其他列的值在特定的列中对值进行限制 .
Create Table 时 的 SQL Check 约束 :
下面的 SQL 在 " Persons" 表创建时在 "P_Id"列上创建 Check 约束 . Check 约束规定 " P_Id" 列必须只包含大于0的整数 .
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
如果需要命名Check 约束 , 并定义多个列的Check 约束 , 请使用下面的SQL语法 :
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT che_Person Check (P_Id>0 AND City='Sandnes')
)
Alter Table 时 的 SQL Check 约束:
当表已被创建时, 如果在 "P_Id" 列创建 Check 约束 , 请使用下面的SQL :
ALTER TABLE Persons
ADD CHECK (P_Id>0)
如果需要命名 CHECK 约束, 并定义多个列的 CHECK 约束 , 请使用下面的SQL 语法 :
ALTER TABLE Persons
ADD CONSTRAINT che_Person Check (P_Id>0 AND City='Sandnes')
撤销 Check 约束
如果需要撤销 Check 约束 , 请使用下面的SQL :
ALTER TABLE Persons
DROP Check che_Pesrson
4 . 根据条件有选择的UPDATE .
例 : 有如下跟新条件
1> . 工资5000以上的职工 , 工资减少10%
2> . 工资在2000到4600之间的职工 , 工资增加15%
很容易考虑的是选择执行两次UPDATE语句 , 如下所示 :
-- 条件1
update salarys set salary=salary*0.9 where salary >= 5000;
-- 条件 2
update salarys set salary=salary*1.15 where salary >= 2000 and salary < 4600
但是事情没有想象得那么简单 , 假设有个人工资 5000 块 . 首先按照条件 1 , 工资减少 10 % , 变成工资4500 . 接下来运行第二个sql的时候 , 因为这个人的工资是4500 在2000到4600 的范围内 , 需增加15% , 最后这个人的工资结果是5157 , 不但没减少, 反而增加了 . 如果要是 反过来执行, 那么工资4600的人相反会变成减少工资 . 如果要一个SQL 语句实现这个功能的话 , 我们需要用到Case函数 . 代码如下
update salarys set salary =
case when salary >= 5000 then salary*0.9
when salary >= 2000 and salary < 4600 then salary*1.15
else salary end;
这里要注意一点 , 最后一行的 esle salary 是必须的 , 要是没有这行, 不符合这两个条件的人的工资将会被写成NULL . 在case 函数中else部分的默认值为NULL , 这点是需要注意的地方 .
Case when的用法相关推荐
- c语言 case语句用法,switch ... case语句的用法[组图]
switch ... case语句的用法[组图] 08-13栏目:技术 TAG:switch case语句 switch case语句 当情况大于或等于4种的时候就用switch ... case语 ...
- mysql数据库中case when 的用法
场景1:比如说我们在数据库存了性别的字段,一般都是存0 和 1 代表男和女 然后我们会得到0和1之后在java中判断 ,很麻烦有么有?其实我们完全可以在sql中判断好之后拿来现成的.就是在sql中 ...
- sql server中case when的用法
CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他' END 注:sql server中case when的用法 - 哦呵呵G - 博客园 --同样的 ...
- 数据库中case when 的用法
CASE WHEN 及 SELECT CASE WHEN的用法 Case具有两种格式.简单Case函数和Case搜索函数. 1.简单Case函数 CASE sex WHEN '1' THEN '男' ...
- cast ,case when的用法
1.case when的用法 需求:将brand_type对应的数字翻译成品牌 selectcasewhen brand_type=1 then '荣威'when brand_type=2 then ...
- Case When语句详解SQL中Case When的用法
SQL中case when的用法 case when类似于编程语言中的if else判断.switch case语句.该语句执行时先对条件进行判断,然后根据判断结果做出相应的操作. Case具有两种格 ...
- mysql case 连接_mysql case when的用法是什么
mysql case when的用法是:1.用作简单搜索,语法为[CASE [col_name] WHEN [value1]]:2.用作搜索函数,语法为[CASE WHEN [expr] THEN [ ...
- ORACLE CASE WHEN 及 SELECT CASE WHEN的用法
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- switch case语句的用法
switch case语句的用法 我们首先来看一下switch case 语句的一般形式是怎样的 switch(表达式){case 常量1 :代码块:break:case 常量2:代码块:break: ...
- 转 ORACLE CASE WHEN 及 SELECT CASE WHEN的用法
原址如下: http://exceptioneye.iteye.com/blog/1197329 ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 Case具有两种格式.简 ...
最新文章
- 基于OpenCV的视频处理管道
- HTMl语言编写的文件扩展名,用HTML编写的文件的扩展名是()。
- java服务器内存问题_java内存泄漏5种情况总结
- element-ui表单验证:用户名、密码、电话、邮箱
- 带你彻底明白 Android Studio 打包混淆
- java打印插件_java c/s项目中有没有好用的打印插件?
- latex 改变字体颜色
- 金蝶云星空即时库存查询SQL语句SQLServer
- EAS BOS 开发问题集锦
- 一文看懂外汇风险准备金率调整为 20%的含义
- 设计word模板添加书签
- python 获取微妙时间差
- charles抓包(charles抓包工具详细教程)
- Java开发-搭建基础开发环境(JDK、Maven、Tomcat、Git、Eclipse、IDEA)
- Schrodinger 功能模块简介
- SQLServer数据库基本操作(一)
- 精品大学生必备网站,值得收藏
- 云原生之容器编排实践-在CentOS7上安装minikube
- Ubuntu18安装Realtek8125b网卡驱动
- Semver语义化版本号和npm包之semver的相关使用
热门文章
- java的hashmap排序_Java HashMap两种简便排序方法解析
- 汽车零配件行业MES系统,你了解多少?
- 论文阅读:2021 | CE-FPN: Enhancing Channel Information for Object Detection
- 汉字笔画动图怎么做_动态图示范汉字笔顺标准,超全面!
- FANUC数控系统应用中心
- 【SCI文献下载】手把手教你如何免费下载SCI文献
- Java8 判空新写法!
- 全国各省市区城市编码SQL
- 高德地图api中的adcode城市编码
- nanohttpd:实现跨域(CORS)请求