Oracle分析函数Over() 详述(3)

复制代码

SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.SAL, E.DEPTNO, FIRST_VALUE(E.SAL) OVER(PARTITION BY E.DEPTNO) FIRST_SAL, LAST_VALUE(E.SAL) OVER(PARTITION BY E.DEPTNO) LAST_SAL FROM EMP E;

复制代码

查询结果:

Oracle分析函数Over() 详述

 

5、ROW_NUMBER() OVER(PARTITION BY.. ORDER BY ..) 排序(应用:分页)

示例:

复制代码

SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO,E.ROW_NUM FROM (SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO, ROW_NUMBER() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL) ROW_NUM FROM EMP E) E WHERE E.ROW_NUM > 3;

复制代码

查询结果:

Oracle分析函数Over() 详述

 

6、sum/avg/count() over(partition by ..)

示例1:

复制代码

SELECT E.ENAME, E.JOB, E.SAL, E.DEPTNO, SUM(E.SAL) OVER(PARTITION BY E.DEPTNO) SUM_SAL, --统计某组中的总计值 AVG(E.SAL) OVER(PARTITION BY E.DEPTNO) AVG_SAL, --统计某组中的平均值 COUNT(E.SAL) OVER(PARTITION BY E.DEPTNO) COUNT_SAL --按某列分组,并统计该组中记录数量 FROM EMP E;

复制代码

查询结果:

Oracle分析函数Over() 详述

示例2(全统计):为数据集统计部门销售总和,全公司销售总和,部门销售均值,全公司销售均值

复制代码

SELECT A.DEPT_ID, A.SALE_DATE, A.GOODS_TYPE, A.SALE_CNT, SUM(A.SALE_CNT) OVER(PARTITION BY A.DEPT_ID) DEPT_TOTAL, --部门销售总和 SUM(A.SALE_CNT) OVER() CMP_TOTAL, --公司销售总额 AVG(A.SALE_CNT) OVER(PARTITION BY A.DEPT_ID) DEPT_AVG, --部门销售均值 AVG(A.SALE_CNT) OVER() CMP_AVG --公司销售均值 FROM LEARN_FUN_KEEP A;

复制代码

 

 7、 rows/range between … preceding and … following 上下范围内求值

说明:unbounded:不受控制的,无限的
   preceding:在...之前
   following:在...之后

 

 rows between … preceding and … following

示例1:显示各部门员工的工资,并附带显示该部门的最高工资

复制代码

SELECT E.DEPTNO, E.EMPNO, E.ENAME, E.SAL, LAST_VALUE(E.SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL ROWS
/*MAX(E.SAL) OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL ROWS*/
--unbounded preceding and unbouned following针对当前所有记录的前一条、后一条记录,也就是表中的所有记录 --unbounded:不受控制的,无限的 --preceding:在...之前 --following:在...之后 BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) MAX_SAL FROM EMP E;

复制代码

结果如下:

Oracle分析函数Over() 详述

写法二;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2012bd7154c4648d0c37ebba367a63e2.html