学习oracle技术,每天学一点,每天进步一点
Oracle 9i 分析函数参考手册(一)
上一篇 / 下一篇 2008-06-16 17:05:52 / 个人分类:pl/sql
Oracle 9i 分析函数参考手册
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。ITPUB个人空间,r+E.vu0~K9t[`.\
下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。ITPUB个人空间LX/Rc5} d1ZZ]
少数几个例子需要访问SH用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/sales_history/sh_main.sql来创建。ITPUB个人空间J"Y Q%N*my.g h C0u
如果未指明缺省是在HR用户下运行例子。
~`*E tA,IVk0 开窗函数的的理解:
n})BVV$KZ0 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
d+}\,f#bsR9c0over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
y'@ o5HW*o0over(partition by deptno)按照部门分区
y5[{8f8o_f0over(order by salary range between 50 preceding and 150 following)ITPUB个人空间,AU1F:k4\yN.Yd
每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150ITPUB个人空间)\1x Wvd0F&o)tM&e
over(order by salary rows between 50 preceding and 150 following)
jY^/t7G-v zQ CfU0每行对应的数据窗口是之前50行,之后150行ITPUB个人空间zWT'hnM_
over(order by salary rows between unbounded preceding and unbounded following)
.nC9hL$WT!o(cB0每行对应的数据窗口是从第一行到最后一行,等效:ITPUB个人空间a&[9s6?Jk3RZ
over(order by salary range between unbounded preceding and unbounded following)ITPUB个人空间 vW JivDI\-`(?
ITPUB个人空间#C8S#Z2Ps-c&idiF
主要参考资料:《expert one-on-one》 Tom Kyte 《Oracle9i SQL Reference》第6章ITPUB个人空间9I+UG9}|'?N
jeYO0a-K,W P0
3iRa6o2JX4Ck0AVGITPUB个人空间je Yap1q]9[2?d9q
功能描述:用于计算一个组和数据窗口内表达式的平均值。
0dl _3y&P*y_"_0SAMPLE:下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告,该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来;
#U1t+mPkVK OG_0ITPUB个人空间-Lt t{i\&GCk
SELECT manager_id, last_name, hire_date, salary,
(O,R"K{)m)PhY8[0 AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date
!mWU"KE%G1L0 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavgITPUB个人空间B1az{J$y
FROM employees;ITPUB个人空间?~H/` r"s(Do/_
ITPUB个人空间@y|Nwy
MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG
QlF3qd%I%Ph0---------- ------------------------- --------- ---------- ----------ITPUB个人空间Ast)CQ&C;e
100 Kochhar 21-SEP-89 17000 17000
XG'T(@y0 100 De Haan 13-JAN-93 17000 15000ITPUB个人空间]w1Qr4C-B6K
100 Raphaely 07-DEC-94 11000 11966.6667ITPUB个人空间yy#K)cG2m F
100 Kaufling 01-MAY-95 7900 10633.3333
0[#oLMa_0 100 Hartstein 17-FEB-96 13000 9633.33333
9P3jf&@&k
下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。ITPUB个人空间LX/Rc5} d1ZZ]
少数几个例子需要访问SH用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/sales_history/sh_main.sql来创建。ITPUB个人空间J"Y Q%N*my.g h C0u
如果未指明缺省是在HR用户下运行例子。
~`*E tA,IVk0 开窗函数的的理解:
n})BVV$KZ0 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
d+}\,f#bsR9c0over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
y'@ o5HW*o0over(partition by deptno)按照部门分区
y5[{8f8o_f0over(order by salary range between 50 preceding and 150 following)ITPUB个人空间,AU1F:k4\yN.Yd
每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150ITPUB个人空间)\1x Wvd0F&o)tM&e
over(order by salary rows between 50 preceding and 150 following)
jY^/t7G-v zQ CfU0每行对应的数据窗口是之前50行,之后150行ITPUB个人空间zWT'hnM_
over(order by salary rows between unbounded preceding and unbounded following)
.nC9hL$WT!o(cB0每行对应的数据窗口是从第一行到最后一行,等效:ITPUB个人空间a&[9s6?Jk3RZ
over(order by salary range between unbounded preceding and unbounded following)ITPUB个人空间 vW JivDI\-`(?
ITPUB个人空间#C8S#Z2Ps-c&idiF
主要参考资料:《expert one-on-one》 Tom Kyte 《Oracle9i SQL Reference》第6章ITPUB个人空间9I+UG9}|'?N
jeYO0a-K,W P0
3iRa6o2JX4Ck0AVGITPUB个人空间je Yap1q]9[2?d9q
功能描述:用于计算一个组和数据窗口内表达式的平均值。
0dl _3y&P*y_"_0SAMPLE:下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告,该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来;
#U1t+mPkVK OG_0ITPUB个人空间-Lt t{i\&GCk
SELECT manager_id, last_name, hire_date, salary,
(O,R"K{)m)PhY8[0 AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date
!mWU"KE%G1L0 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavgITPUB个人空间B1az{J$y
FROM employees;ITPUB个人空间?~H/` r"s(Do/_
ITPUB个人空间@y|Nwy
MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG
QlF3qd%I%Ph0---------- ------------------------- --------- ---------- ----------ITPUB个人空间Ast)CQ&C;e
100 Kochhar 21-SEP-89 17000 17000
XG'T(@y0 100 De Haan 13-JAN-93 17000 15000ITPUB个人空间]w1Qr4C-B6K
100 Raphaely 07-DEC-94 11000 11966.6667ITPUB个人空间yy#K)cG2m F
100 Kaufling 01-MAY-95 7900 10633.3333
0[#oLMa_0 100 Hartstein 17-FEB-96 13000 9633.33333
9P3jf&@&k