首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

oracle over()分析函数的事例

2012-09-15 
oracle over()分析函数的例子oracle over()函数,从oracle 8i开始支持,后面的版本支持的比较好.通常在做统

oracle over()分析函数的例子

oracle over()函数,从oracle 8i开始支持,后面的版本支持的比较好.通常在做统计分析时我们都想尽可能多滴选择出原始列和统计值列,但是这样group by后面就必须跟随更多的列,使用分析函数可以避免使用group by时选择出来的列名必须出现在group by列表中的痛苦.--1、over() 注(9i下over括号内必须有内容,不允许为空,本文所有示例均在10g下运行的)--所有人的总工资select a.empno, a.ename, sum(a.sal) over() total from emp a;EMPNOENAMETOTAL7369SMITH290257499ALLEN290257521WARD290257566JONES290257654MARTIN290257698BLAKE290257782CLARK290257788SCOTT290257839KING290257844TURNER290257876ADAMS290257900JAMES290257902FORD290257934MILLER29025--2、over(partition by ...) 分组统计--统计部门的平均工资select a.empno,       a.ename,       b.dname,       to_char(round(avg(a.sal) over(partition by b.dname), 2),'$999,999,999.99') dept_avg  from emp a, dept b where a.deptno = b.deptno;EMPNOENAMEDNAME        DEPT_AVG7934MILLERACCOUNTING      $2,916.677839KINGACCOUNTING      $2,916.677782CLARKACCOUNTING      $2,916.677876ADAMSRESEARCH    $2,175.007902FORDRESEARCH    $2,175.007566JONESRESEARCH    $2,175.007369SMITHRESEARCH    $2,175.007788SCOTTRESEARCH    $2,175.007521WARDSALES        $1,566.677844TURNERSALES        $1,566.677499ALLENSALES        $1,566.677900JAMESSALES        $1,566.677698BLAKESALES        $1,566.677654MARTINSALES        $1,566.67--查询出管理员工人数最多的人的名字和他管理的人的名字select b.ename, t.ename, t.mgr, t.cnt  from (select a.empno,               a.ename,               a.mgr,               count(1) over(partition by a.mgr) cnt          from emp a) t,       emp b where t.mgr = b.empno;ENAMEENAMEMGRCNTJONESSCOTT75662JONESFORD75662BLAKEWARD76985BLAKETURNER76985BLAKEALLEN76985BLAKEJAMES76985BLAKEMARTIN76985CLARKMILLER77821SCOTTADAMS77881KINGBLAKE78393KINGJONES78393KINGCLARK78393FORDSMITH79021--3、over(order by ...) 排序统计select a.empno,       a.deptno,       a.ename,       a.sal,       sum(a.sal) over(order by a.ename) sum  from emp a;EMPNODEPTNOENAMESALSUM787620ADAMS1100.001100749930ALLEN1600.002700769830BLAKE2850.005550778210CLARK2450.008000790220FORD3000.0011000790030JAMES950.0011950756620JONES2975.0014925783910KING5000.0019925765430MARTIN1250.0021175793410MILLER1300.0022475778820SCOTT3000.0025475736920SMITH800.0026275784430TURNER1500.0027775752130WARD1250.0029025--4、over(partition by ... order by ...) 分组排序统计--统计各部门薪水前三名的人员select t.*  from (select rank() over(partition by b.dname order by a.sal desc) rk,               a.empno,               a.ename,               b.dname,               a.sal          from emp a, dept b         where a.deptno = b.deptno) t where t.rk <= 3;RKEMPNOENAMEDNAME         SAL17839KINGACCOUNTING     5000.0027782CLARKACCOUNTING     2450.0037934MILLERACCOUNTING     1300.0017902FORDRESEARCH     3000.0017788SCOTTRESEARCH     3000.0037566JONESRESEARCH     2975.0017698BLAKESALES         2850.0027499ALLENSALES         1600.0037844TURNERSALES         1500.00

热点排行