oracle数据库中常用的几个非主流函数

今天我向大家介绍oracle中几个常用但是非主流的函数,有以下几个:

COALESCE , DECODE , WM_CONCAT , LISTAGG , ROLLUP ,   开窗函数(分析函数) 。

使用的例子,是oracle数据库中的 scott 用户中的 四张表,EMP , DEPT , SALGRADE , BONUS 

下面分别介绍一下:

1. COALESCE 

说道这个函数,首先需要说一个其他类似的函数: NVL(exp1,exp2) 

这个函数的意义是,如果exp1不为空,就返回 exp1 的值;如果 exp1 为空,就返回 exp2 的值 。

那么问题来了,如果我在想判断 exp2 的值为空的时候,在返回一个其他的值怎么办呢?或者exp3 为空的时候,在返回一个其他的值,怎么办,很明显NVL这个函数无能为力

COALESCE 函数 就能够实现这个功能 , 用法是  COALESCE(exp1 , exp2 , exp3 ....)

这个函数的意义是 , 遇到非null值即停止并返回该值,如果所有的表达式都是空值,最终将返回一个空值


2. DECODE

主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);
使用方法:
Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
From talbename
Where …
其中 columnname 为要选择的table中所定义的column,
如果 columnname 的值等于 值1 ,那么返回 翻译值1;
如果 columnname 的值等于 值2 ,那么返回 翻译值2...
如果 一直到 值n 都不相等,那么就返回 缺省值 


3WM_CONCAT

SELECT T.DEPTNO,WM_CONCAT(T.ENAME) FROM EMP T 
GROUP BY T.DEPTNO;

返回的结果如下:

10 CLARK,KING,MILLER
20 SMITH,FORD,ADAMS,SCOTT,JONES
30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD

也就是说 WM_CONCAT 就相当于一个聚合函数,中间使用  , 连接 


4. LISTAGG 

这个函数是从 ORACLE 11G 才有的一个函数!!

我们有时候会遇到这样的需求:“对员工列表进行操作,将每个部门的员工名称横向排列,并且按照姓名排序,以逗号进行分割”
SELECT T.DEPTNO,LISTAGG(T.ENAME,',') WITHIN GROUP (ORDER BY T.ENAME) FROM EMP T 
GROUP BY T.DEPTNO;


5.ROLLUP 函数

这个函数也是一个分析函数,至于分析函数都有哪一些,主要查看 第6部分

本函数主要适用于 在分组求和之后,在结果集后面在添加行,用于显示总计

语法1:

SELECT T.DEPTNO,SUM(T.SAL) FROM 
EMP T GROUP BY ROLLUP(T.DEPTNO) ;

显示的结果集:

10 8750
20 10875
30 9400
29025

如果将每个部门的员工工资显示出来,并且显示每个部门的合计工资,那么就需要这么写:

SELECT T.DEPTNO,T.ENAME,SUM(T.SAL) FROM 
EMP T GROUP BY ROLLUP(T.DEPTNO,T.ENAME) ;

结果集:

10 KING 5000
10 CLARK 2450
10 MILLER 1300
10 8750
20 FORD 3000
20 ADAMS 1100
20 JONES 2975
20 SCOTT 3000
20 SMITH 800
20 10875
篇幅原因,剩下的结果集省略.... ....

还可以在进一步学习一下跟 ROLLIUP 有关的 GROUPING函数


6. 开窗函数【分析函数】

开窗函数又叫做分析函数 ,主要由以下几个常用的分析函数

a. 自动汇总函数rollup,cube,
b. rank 函数, rank,dense_rank,row_number
c. lag,lead函数
lag  函数 “取到上个月的销售额”
lead 函数 “获取下一个月销售量”
d. sum,avg,的移动增加,移动平均数
e. ratio_to_report报表处理函数
f. first,last取基数的分析函数

有了上面的介绍,剩下的可以在通过查找百度解决了,这篇博客主要起到抛砖引玉的作用!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值