【总结】ORACLE的DECODE()函数的个人使用总结

[b]1、DECODE函数是ORACLE PL/SQL是功能强大的函数之一。[/b]

[b]2、函数涵义:[/b]
网上摘录如下:[color=blue]DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value 等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。[/color]

[b]3、例子:[/b]
3.1 可以看成是case when的简写版,如下:
数据结构
CREATE TABLE USERS (ID INTEGER NOT NULL, NAME VARCHAR2(20), SEX CHAR(1), HEIGHT NUMBER(16,2), PRIMARY KEY (ID));
(sex:1-男,2-女,height:身高)

* > select * from users;
------------------------------
id name sex height
1 jack 1 1.78
2 lily 2 1.6
3 amma 2 1.58
4 kimi 1 1.7

将sex转义为中文:
* > select id,name,decode(sex,'1','男','2','女','未知') as sex,height from users;
------------------------------
id name sex height
1 jack 男 1.78
2 lily 女 1.6
3 amma 女 1.58
4 kimi 男 1.7

3.2 行转列
数据结构同3.1

需求:现要统计,用户(users)表的男女生的数量,传统的写法如下:
* > select decode(sex,'1','男生合计数','2','女生合计数','未知') as sex,count(*) as numb from users group by sex;
------------------------------
sex numb
男生合计数 2
女生合计数 2


[u][b]***** 这样有个缺点,就是变成了两行数据,但如果我想变成一行数据呢?即把男女生的合计数,并成一行,那么,就要灵活运用DECODE()函数,和sum()函数,如下:[/b][/u]

* > select sum(decode(sex,'1','1')) as 男生合计数,sum(decode(sex,'2','1')) as 女生合计数 from users;
------------------------------
男生合计数 女生合计数
2 2

3.3 行转列,DECODE()函数配合AVG()函数。
[b]**** 需求:统计男女生的平均身高。[/b]
* > select avg(decode(sex,'1',height)) as 男生平均身高,avg(decode(sex,'2',height)) as 女生平均身高 from users;
------------------------------
男生平均身高 女生平均身高
1.74 1.59
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值