搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
爱喝兽奶帝天荒
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
oracle的merge into操作详解_merge into oracle
2
docker build 没有网络 执行dockerfile中yum报错 curl#6 - “Could not resolve host: mirrorlist.centos.org 解决方法_curl#6 - "could not resolve host: mirrorlist.cento
3
校园报修维修小程序,微信小程序报修系统,微信小程序宿舍报修系统毕设作品_校园维修的意义
4
工业互联网的人工智能与大数据融合应用
5
大模型训练:文件保存类型与优化策略_大模型训练文件
6
聚类篇——(三)K-Medoids聚类
7
(19-2)操作国产大模型:LangChain与百度千帆大模型实践_qianfanllmendpoint
8
python如何停止子线程_【已解决】python 如何结束子线程呢
9
100份PHP计算机毕业设计项目推荐(源码+论文+PPT)_php结课项目
10
Python+OpenCV之图片批处理(一)_opencv批量读取图片python
当前位置:
article
> 正文
oracle case when的使用方法
作者:爱喝兽奶帝天荒 | 2024-07-23 19:22:38
赞
踩
oracle case when的用法
大家都知道Case when的用法,一旦满足了某一个WHEN ,则这一条数据就会退出CASE WHEN,而不再考虑其他CASE ,文章来详细的介绍了case when的用法并举例说明了。
Case when 的用法
--简单Case函数
简单CASE表达式,使用表达式确定返回值.
语法: www.2cto.com
代码如下
CASE search_expression
WHEN expression1 THEN result1
WHEN expression2 THEN result2
...
WHEN expressionN THEN resultN
ELSE default_result
搜索CASE表达式,使用条件确定返回值.
其中end后面跟的值相当于別名
语法:
代码如下
CASE
WHEN condition1 THEN result1
WHEN condistion2 THEN result2
...
WHEN condistionN THEN resultN
ELSE default_result
END
例:
select product_id,product_type_id,
case
when product_type_id=1 then 'Book'
when product_type_id=2 then 'Video'
when product_type_id=3 then 'DVD'
when product_type_id=4 then 'CD'
else 'Magazine' www.2cto.com
end
from products
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
比如说,下面这段SQL,你永远无法得到“第二类”这个结果
代码如下
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a') THEN '第二类'
ELSE'其他' END
下面我们来看一下,使用Case函数都能做些什么事情。
一,已知数据按照另外一种方式进行分组,分析。
有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)
国家(country) 人口(population)
中国 600
美国 100
加拿大 100
英国 200
法国 300
日本 250
德国 200
墨西哥 50
印度 250
根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲 人口
亚洲 1100
北美洲 250
其他 700
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。 www.2cto.com
如果使用Case函数,SQL代码如下
代码如下
SELECT SUM(population),
CASE country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END
FROM Table_A
GROUP BY CASE country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END;
同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。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 Table_A
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; www.2cto.com
二,用一个SQL语句完成不同条件的分组。
有如下数据
国家(country) 性别(sex) 人口(population)
中国 1 340
中国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60
按照国家和性别进行分组,得出结果如下
国家 男 女
中国 340 260
美国 45 55
加拿大 51 49
英国 40 60
普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。
下面是一个是用Case函数来完成这个功能的例子
代码如下
SELECT country,
SUM( CASE WHEN sex = '1' THEN
population ELSE 0 END), --男性人口
SUM( CASE WHEN sex = '2' THEN
population ELSE 0 END) --女性人口
FROM Table_A
GROUP BY country;
这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。
三,在Check中使用Case函数。
在Check中使用Case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Check。
下面我们来举个例子
公司A,这个公司有个规定,女职员的工资必须高于1000块。如果用Check和Case来表现的话,如下所示 www.2cto.com
代码如下
CONSTRAINT check_salary CHECK
( CASE WHEN sex = '2'
THEN CASE WHEN salary > 1000
THEN 1 ELSE 0 END
ELSE 0 END )
如果单纯使用Check,如下所示
代码如下
CONSTRAINT check_salary CHECK
( sex = '2' AND salary > 1000 )
女职员的条件倒是符合了,男职员就无法输入了。
实例
代码如下
create table feng_test(id number, val varchar2(20);
insert into feng_test(id,val)values(1,'abcde');
insert into feng_test(id,val)values(2,'abc');
commit;
SQL>select * from feng_test;
id val
-------------------
1 abcde
2 abc
SQL>select id
, case when val like 'a%' then '1'
when val like 'abcd%' then '2'
else '999' www.2cto.com
end case
from feng_test;
id case
---------------------
1 1
2 1
根据我自己的经验我倒觉得在使用case when这个很像
asp
case when以在php swicth case开发关语句的用法,只要有点基础知道我觉得在sql中的case when其实也很好理解。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/871178?site
推荐阅读
article
Oracle
DBA
全攻略_
oracle
dba
要準備什麼...
Oracle
DBA
全攻略之一:必备16大技能和经典书籍汇总 一个称职的数据库
DBA
仅仅取得ORACLE厂家认证是不够的...
赞
踩
article
Oracle
DBA
:
必备16大技能和经典书籍汇总_
oracle
数据库
dba
需要学什么...
一个称职的
数据库
DBA
仅仅取得ORACLE厂家认证是不够的,关键是真实环境的历练,笔者从事ORACLE
DBA
多年,经历...
赞
踩
article
Study
--
Oracle
-07-
ASM
自动
存储管理
(
一
)...
不镜像磁盘,而是镜像盘区。
ASM
将文件的主盘区分配给磁盘组中的
一
个磁盘时,它会将该盘区的镜像副本分配给磁盘组中的另
一
个磁...
赞
踩
article
Oracle
高
版本
往低
版本
备份
恢复的方法...
1. 高
版本
的数据库
备份
恢复到低
版本
的数据库 有时候回报错, 提示version
版本
不一致,2. 其实方法是expdp ...
赞
踩
article
AWS
提交
支持
案例
工单
(
Support
case
)教程_
aws
dx怎么
提交
case
...
登录
AWS
管理控制台,访问
AWS
网站,输入账号凭证登录,打开
AWS
支持
中心,在服务列表中选择 "
支持
",进入...
赞
踩
article
oracle
函数
with
as
,
oracle
中
create
table
with
as
和inser...
oracle
支持使用
with
as
子句来创建表语法:
create
table
table
_name
as
with
cl...
赞
踩
article
【ORACLE】
Oracle
提高篇之
WITH
AS_
oracle
with
as
用法优点缺点...
With
as
在
Oracle
中使用的还是很频繁的,我几乎稍微有点长的sql都会使用
with
as
。不仅sql清晰,而...
赞
踩
article
Oracle
查询
表
字
段
注释
以及
表
的
注释
_
oracle
查询
表
名及
注释
...
声明:
Oracle
中
查询
字
段
注释
和字
段
时,
表
名都必须大写。_
oracle
查询
表
名及
注释
oracle
查询
表
名及
注释
...
赞
踩
article
MySQL
开窗
、
CASE
WHEN
以及
CTE
的使用和理解_
case
when
里面可以用
开窗
嘛...
MySQL
开窗
、
CASE
WHEN
以及
CTE
的使用和理解一、
开窗
函数什么时候适合用
开窗
函数:1、用法分类2、over()...
赞
踩
article
Oracle
11g
下载
及安装教程_
oracle
11g
for
windows
百度云...
下载
Oracle
11g
R2
for
Windows版本,官网的
下载
地址:
Oracle
1of 2
Oracle
2of...
赞
踩
article
oracle
11g
下载
和安装教程_
oracle
11g
下载
教程...
下载
oracle
11g
1首先我们去官网
下载
最新版本的
oracle
11g
数据库;打开
oracle
官网,然后点击“Dow...
赞
踩
article
Oracle
基础之一->
Oracle
11
安装
与
介绍
_
oracle
11
...
一、数据库
介绍
1、关系型数据库(1)Mysql(用的最多)(2)
Oracle
(最安全)(3)Sql server(.ne...
赞
踩
article
Oracle
Database
11g
11.2.
0
.2.
0
官网
下载
_
oracle
11g
下载
...
每一个里面都包含database 选中两个压缩包,一起解压 ,会得到一个合并的文件。2、点击上方Resources 在下...
赞
踩
article
Oracle
11g
图文
下载
安装教程(一步一图)_
oracle
11g
安装包
下载
...
没有
安装包
的点这里
下载
点击
下载
时会提示登录账号,我
下载
时没有账号然后就选择了注册,随便填填就行,最后进行邮箱验证,然后在...
赞
踩
article
CentOS
7 无
图形界面
安装
配置
Oracle
-
11g
_
安装
oracle
11g
依赖包...
1.
安装
前准备1.1下载
安装
包## 下载
Oracle
_
11g
安装
包 这里下载的是
11g
版本 https://www...
赞
踩
article
Oracle
11g
数据库
详细
安装
步骤图解...
1.先到
Oracle
官网上下载
11g
oracle Database
11g
第 2 版 (11.2.0.1.0) 标准版、...
赞
踩
article
oracle
11g
|
oracle
11g
下载
地址|
oracle
11g
最新版本
下载
_oracl...
以下是
oracle
各类操作系统的
下载
地址欢迎大家
下载
Microsoft Windows Server 2
0
0
8 (3...
赞
踩
article
1
、
Oracle
1
1
g
安装教程_
oracle
1
1
g
安装详细教程...
Oracle
1
1
g
安装步骤_
oracle
1
1
g
安装详细教程
oracle
1
1
g
安装详细教程 ...
赞
踩
article
oracle
11gxe
官网
下载
地址_
oracle
11g
官方
下载
地址...
(注意需要登陆
oracle
官网帐号)_
oracle
11g
官方
下载
地址
oracle
11g
官方
下载
地址 ...
赞
踩
article
Oracle
11g
数据库
详细
安装
步骤图解,附带
安装
包_
oracle
11g
...
1.先到
Oracle
官网上下载
11g
oracle Database
11g
第 2 版 (11.2.0.1.0) 标准...
赞
踩
相关标签
oracle
database
performance
documentation
training
dictionary
数据库
aws
云计算
运维
阿里云
华为云
oracle 函数with as
with as
mysql
oracle 11g的下载
oracle 11g的安装