SQL之casewhenthen用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL之casewhenthen⽤法
case具有两种格式。
简单case函数和case搜索函数。
--简单case函数
case sex
when'1'then'男'
when'2'then'⼥’
else '其他' end
--case搜索函数
case when sex = '1' then '男'
when sex = '2' then '⼥'
else '其他' end
这两种⽅式,可以实现相同的功能。
简单case函数的写法相对⽐较简洁,但是和case搜索函数相⽐,功能⽅⾯会有些限制,⽐如写判定式。
还有⼀个需要注重的问题,case函数只返回第⼀个符合条件的值,剩下的case部分将会被⾃动忽略。
--⽐如说,下⾯这段sql,你永远⽆法得到“第⼆类”这个结果
case when col_1 in ('a','b') then'第⼀类'
when col_1 in ('a') then'第⼆类'
else'其他'end
下⾯实例演⽰:
⾸先创建⼀张users表,其中包含id,name,sex三个字段,表内容如下:
SQL>drop table users purge;
drop table users purge
ORA-00942: 表或视图不存在
SQL>create table users(id int,name varchar2(20),sex number);
Table created
SQL>insert into users(id,name) values(1,'张⼀');
1 row inserted
SQL>insert into users(id,name,sex) values(2,'张⼆',1);
1 row inserted
SQL>insert into users(id,name) values(3,'张三');
1 row inserted
SQL>insert into users(id,name) values(4,'张四');
1 row inserted
SQL>insert into users(id,name,sex) values(5,'张五',2);
1 row inserted
SQL>insert into users(id,name,sex) values(6,'张六',1);
1 row inserted
SQL>insert into users(id,name,sex) values(7,'张七',2);
1 row inserted
SQL>insert into users(id,name,sex) values(8,'张⼋',1);
1 row inserted
SQL>commit;
Commit complete
SQL>select*from users;
ID NAME SEX
--------------------------------------- -------------------- ----------
1张⼀
2张⼆1
3张三
4张四
5张五2
6张六1
7张七2
8张⼋1
8 rows selected
1、上表结果中的"sex"是⽤代码表⽰的,希望将代码⽤中⽂表⽰。
可在语句中使⽤case语句:
SQL>select u.id,,u.sex,
2 (case u.sex
3when1then'男'
4when2then'⼥'
5else'空的'
6end
7 )性别
8from users u;
ID NAME SEX 性别
--------------------------------------- -------------------- ---------- ------
1张⼀空的
2张⼆1男
3张三空的
4张四空的
5张五2⼥
6张六1男
7张七2⼥
8张⼋1男
8 rows selected
2、如果不希望列表中出现"sex"列,语句如下:
SQL>select u.id,,
2 (case u.sex
3when1then'男'
4when2then'⼥'
5else'空的'
6end
7 )性别
8from users u;
ID NAME 性别
--------------------------------------- -------------------- ------
1张⼀空的
2张⼆男
3张三空的
4张四空的
5张五⼥
6张六男
7张七⼥
8张⼋男
8 rows selected
3、将sum与case结合使⽤,可以实现分段统计。
如果现在希望将上表中各种性别的⼈数进⾏统计,sql语句如下:SQL>select
2sum(case u.sex when1then1else0end)男性,
3sum(case u.sex when2then1else0end)⼥性,
4sum(case when u.sex <>1and u.sex<>2then1else0end)性别为空
5from users u;
男性⼥性性别为空
---------- ---------- ----------
320
--------------------------------------------------------------------------------
SQL>select
2count(case when u.sex=1then1end)男性,
3count(case when u.sex=2then1end)⼥,
4count(case when u.sex <>1and u.sex<>2then1end)性别为空
5from users u;
男性⼥性别为空
---------- ---------- ----------
320。