ORACLE中OVER函数的用法.docx

上传人:b****4 文档编号:1212620 上传时间:2022-10-19 格式:DOCX 页数:13 大小:70.77KB
下载 相关 举报
ORACLE中OVER函数的用法.docx_第1页
第1页 / 共13页
ORACLE中OVER函数的用法.docx_第2页
第2页 / 共13页
ORACLE中OVER函数的用法.docx_第3页
第3页 / 共13页
ORACLE中OVER函数的用法.docx_第4页
第4页 / 共13页
ORACLE中OVER函数的用法.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

ORACLE中OVER函数的用法.docx

《ORACLE中OVER函数的用法.docx》由会员分享,可在线阅读,更多相关《ORACLE中OVER函数的用法.docx(13页珍藏版)》请在冰豆网上搜索。

ORACLE中OVER函数的用法.docx

ORACLE中OVER函数的用法

oracleover函数详解

今天在javaeye上看到一道面试题,很多人都用over函数解决的

特意查了一下它的用法

SQL>selectdeptno,ename,sal

  2  fromemp

  3  orderbydeptno;

DEPTNOENAME      SAL

------------------------------

     10CLARK      2450

       KING      5000

       MILLER       1300

     20SMITH      800

       ADAMS      1100

       FORD      3000

       SCOTT      3000

       JONES      2975

     30ALLEN      1600

       BLAKE      2850

       MARTIN       1250

       JAMES      950

       TURNER       1500

       WARD      1250

已选择14行。

2.先来一个简单的,注意over(...)条件的不同,

使用sum(sal)over(orderbyename)...查询员工的薪水“连续”求和,

注意over(order  byename)如果没有orderby子句,求和就不是“连续”的,

放在一起,体会一下不同之处:

SQL>selectdeptno,ename,sal,

  2  sum(sal)over(orderbyename)连续求和,

  3  sum(sal)over()总和,          --此处sum(sal)over()等同于sum(sal)

  4  100*round(sal/sum(sal)over(),4)"份额(%)"

  5  fromemp

  6  /

DEPTNOENAME      SAL连续求和  总和份额(%)

------------------------------------------------------------

     20ADAMS      1100  1100  29025  3.79

     30ALLEN      1600  2700  29025  5.51

     30BLAKE      2850  5550  29025  9.82

     10CLARK      2450  8000  29025  8.44

     20FORD      3000  11000  29025  10.34

     30JAMES      950  11950  29025  3.27

     20JONES      2975  14925  29025  10.25

     10KING      5000  19925  29025  17.23

     30MARTIN       1250  21175  29025  4.31

     10MILLER       1300  22475  29025  4.48

     20SCOTT      3000  25475  29025  10.34

     20SMITH      800  26275  29025  2.76

     30TURNER       1500  27775  29025  5.17

     30WARD      1250  29025  29025  4.31

已选择14行。

3.使用子分区查出各部门薪水连续的总和。

注意按部门分区。

注意over(...)条件的不同,

sum(sal)over(partitionbydeptnoorderbyename)按部门“连续”求总和

sum(sal)over(partitionbydeptno)按部门求总和

sum(sal)over(orderbydeptno,ename)不按部门“连续”求总和

sum(sal)over()不按部门,求所有员工总和,效果等同于sum(sal)。

SQL>selectdeptno,ename,sal,

  2  sum(sal)over(partitionbydeptnoorderbyename)部门连续求和,--各部门的薪水"连续"求和

  3  sum(sal)over(partitionbydeptno)部门总和,  --部门统计的总和,同一部门总和不变

  4  100*round(sal/sum(sal)over(partitionbydeptno),4)"部门份额(%)",

  5  sum(sal)over(orderbydeptno,ename)连续求和,--所有部门的薪水"连续"求和

  6  sum(sal)over()总和,  --此处sum(sal)over()等同于sum(sal),所有员工的薪水总和

  7  100*round(sal/sum(sal)over(),4)"总份额(%)"

  8  fromemp

  9  /

DEPTNOENAMESAL部门连续求和部门总和部门份额(%)连续求和总和  总份额(%)

----------------------------------------------------------------------------

10CLARK2450    2450  8750    28  2450  29025  8.44

  KING5000    7450  8750  57.14  7450  29025  17.23

  MILLER  1300    8750  8750  14.86  8750  29025  4.48

20ADAMS1100    1100  10875  10.11  9850  29025  3.79

  FORD3000    4100  10875  27.59  12850  29025  10.34

  JONES2975    7075  10875  27.36  15825  29025  10.25

  SCOTT3000     10075  10875  27.59  18825  29025  10.34

  SMITH800     10875  10875     7.36  19625  29025  2.76

30ALLEN1600    1600  9400  17.02  21225  29025  5.51

  BLAKE2850    4450  9400  30.32  24075  29025  9.82

  JAMES950    5400  9400  10.11  25025  29025  3.27

  MARTIN  1250    6650  9400     13.3  26275  29025  4.31

  TURNER  1500    8150  9400  15.96  27775  29025  5.17

  WARD1250    9400  9400     13.3  29025  29025  4.31

已选择14行。

4.来一个综合的例子,求和规则有按部门分区的,有不分区的例子

SQL>selectdeptno,ename,sal,sum(sal)over(partitionbydeptnoorderbysal)dept_sum,

  2  sum(sal)over(orderbydeptno,sal)sum

  3  fromemp;

DEPTNOENAME      SALDEPT_SUM     SUM

--------------------------------------------------

     10MILLER       1300  1300  1300

       CLARK      2450  3750  3750

       KING      5000  8750  8750

     20SMITH      800     800  9550

       ADAMS      1100  1900  10650

       JONES      2975  4875  13625

       SCOTT      3000  10875  19625

       FORD      3000  10875  19625

     30JAMES      950     950  20575

       WARD      1250  3450  23075

       MARTIN       1250  3450  23075

       TURNER       1500  4950  24575

       ALLEN      1600  6550  26175

       BLAKE      2850  9400  29025

已选择14行。

5.来一个逆序的,即部门从大到小排列,部门里各员工的薪水从高到低排列,累计和的规则不变。

SQL>selectdeptno,ename,sal,

  2  sum(sal)over(partitionbydeptnoorderbydeptnodesc,saldes

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1