`
angelbill3
  • 浏览: 252693 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 
阅读更多
1、DECODE函数是ORACLE PL/SQL是功能强大的函数之一。

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

3、例子:
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


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

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

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





分享到:
评论
1 楼 hu3625067 2014-02-21  
very good,fighting!

相关推荐

Global site tag (gtag.js) - Google Analytics