Аналитические функции в Oracle

Аналитические функции в Oracle — хорошая вещь, пользуетесь!

Простой пример подсчета промежуточной суммы зарплат по отделам  позволят получить начальное представление о принципах использования аналитических функций:


--простой пример

SELECT ename, deptno, sal,
SUM(sal) OVER (ORDER BY deptno, ename) running_total,
SUM(sal) OVER (PARTITION BY deptno ORDER BY ename) department_total,
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY ename) seq
FROM scott.emp
ORDER BY deptno, ename

ENAME DEPTNO SAL RUNNING_TOTAL DEPARTMENT_TOTAL SEQ
CLARK 10 2450 2450 2450 1
KING 10 5000 7450 7450 2
MILLER 10 1300 8750 8750 3
ADAMS 20 1100 9850 1100 1
FORD 20 3000 12850 4100 2
JONES 20 2975 15825 7075 3
SCOTT 20 3000 18825 10075 4
SMITH 20 800 19625 10875 5
ALLEN 30 1600 21225 1600 1
BLAKE 30 2850 24075 4450 2
JAMES 30 950 25025 5400 3
MARTIN 30 1250 26275 6650 4
TURNER 30 1500 27775 8150 5
WARD 30 1250 29025 9400 6

Этот новый набор функциональных возможностей содержит много замечательного.
Он открывает абсолютно новые перспективы работы с данными. Можно избавиться от большого
объема процедурного кода и сложных (или неэффективных) запросов, требующих много времени на
разработку, и получить при этом желаемый результат.