Mittwoch, 29. Februar 2012

ORACLE Analytische Funktionen

Man möchte für jede Abteilung die Löhne der einzelnen Mitarbeitern im Vergleich des gesamt Lohns pro Abteilung ausgeben:

Mit einem herkömmlichen Select kann dies so gelöst werden:

SELECT e1.deptno, e1.sal, e2.sum_sal, (e1.sal/e2.sum_sal) sum_tot
FROM emp e1,
 (
   SELECT deptno, SUM (sal) sum_sal
   FROM emp
   GROUP BY deptno
) e2
WHERE e1.deptno = e2.deptno
ORDER BY e1.deptno

Hier muss die Tabelle EMP zwei Mal ausgelesen werden. Oracle biete Analytische Funktionen, damit die Tabelle EMP nur einmal ausgelesen werden muss. Das Pendant zum obigen Select sieht dann so aus:
SELECT depno, empno, sal, RATIO_TO_REPORT(sal) OVER (PARTITION BY deptno) sum_tot
FROM emp

Keine Kommentare:

Kommentar veröffentlichen