
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;

查询结果:

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;

查询结果:

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;

查询结果:

示例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;

结果如下:

写法二;