一、order by对窗口的影响 不含order by的: SQL> select deptno,sal,sum(sal) over() 2 from emp; 不含order by时,默认的窗口是从结果集的第一行直到末尾。 含order by的: SQL> select deptno,sal, 2 sum(sal) over(order by deptno) as sumsal 3 from emp; 当含有order by时,默认的窗口是从第一行直到当前分组的最后一行。
二、用于排列的函数 SQL> select empno, deptno, sal, 2 rank() over 3 (partition by deptno order by sal desc nulls last) as rank, 4 dense_rank() over 5 (partition by deptno order by sal desc nulls last) as dense_rank, 6 row_number() over 7 (partition by deptno order by sal desc nulls last) as row_number 8 from emp;
三、用于合计的函数
SQL> select deptno,sal, 2 sum(sal) over (partition by deptno) as sumsal, 3 avg(sal) over (partition by deptno) as avgsal, 4 count(*) over (partition by deptno) as count, 5 max(sal) over (partition by deptno) as maxsal 6 from emp;
四、开窗语句
1、rows窗口: "rows 5 preceding"
适用于任何类型而且可以order by多列。
SQL> select deptno,ename,sal, 2 sum(sal) over (order by deptno rows 2 preceding) sumsal 3 from emp;
rows 2 preceding:将当前行和它前面的两行划为一个窗口,因此sum函数就作 用在这三行上面 SQL> select deptno,ename,sal, 2 sum(sal) over