快捷搜索:

详解Oracle的分析函数<BR><a name="t0"></a>分析函数

阐发函数概述

Oracle中的阐发函数和聚合函数相似,然则对付每一组记录,无论若干行,聚合函数只返回一行值,而阐发函数对此中每一行记录都返回值。这一组记录,称为阐发函数的一个(WINDOW),窗口抉择了要处置惩罚数据的范围,该范围在物理上可以由指定的行数来确定,或者在逻辑上由相对偏移量来确定。阐发函数老是在除了ORDER BY之外的其他子句运算后才履行的,以是它不能呈现在where、group by等子句中,只能呈现在select列表和order by子句中。

用于排名的几个阐发函数

row_number

rank

dense_rank

在前例根基上,部门编号只输出一次:

SQL> select (case when deptno= lag(deptno,1,-1)over(partition by deptno order by ename) then null else deptno end) deptno

2, ename3, lag(ename,1,'AAA')over(partition by deptno order by ename) lower_name

4, lead(ename,1,'ZZZ')over(partition by deptno order by ename) higher_name5from emp;

DEPTNO ENAMELOWER_NAME HIGHER_NAM

---------- ---------- ---------- ----------10 CLARKAAAKING

KINGCLARKMILLERMILLERKINGZZZ

20 ADAMSAAAFORDFORDADAMSJONES

JONESFORDSCOTTSCOTTJONESSMITH

SMITHSCOTTZZZ30 ALLENAAABLAKE

BLAKEALLENJAMESJAMESBLAKEMARTIN

MARTINJAMESTURNERTURNERMARTINWARD

WARDTURNERZZZ

相邻类阐发函数要点

LAG/LEAD(v, n, dv)里的n表示位移,必须是0或正整数,dv是在没有取到对应值时的默认值。n默认是1,dv默认是null。

相邻类阐发函数后面order by子句是必须的

partition by 和 order by后均可跟多列

相关统计阐发函数--AVG

例1:求出每个部门每种货物的贩卖额与该货物在公司各部门匀称贩卖额之间的差值

您可能还会对下面的文章感兴趣: