Inhaltsverzeichnis
Oracle Analytic Functions im praktischen Einsatz
Eine Einführung zum Thema steht hier:
http://www.pipperr.de/knowhow/ana_function/analytic_functions.html
Eine ANA Funktion wird auf der Ergebnis Menge durchgeführt:
Beispiel 1 - Lücken in einem Datenstrom finden
Vorgänger/Nachfolger finden
- Lag()
- Lead()
z.B.
- Unterschied zwischen zwei Bereichen/Quartalen
- Lücken in Daten finden
In einer Tabelle soll eine normalerweise fortlaufende Nummer auf Lücken geprüft werden:
Beispiel 2 - Top N Query
Ranking Funktionen:
- rank()
- dense_rank()
- row_number()
- cume_dist()
- percent_rank()
- Ntile()
Mit der rank() Funktion kann dem Ergebnis einer Abfrage ein Rang pro Ergebnis zu geordnet werden.
Beispiel 3 - Doppelte Daten finden
Mit Hilfe der row_number() Funktion doppelte Daten identifizieren
Beispiel 4 - Prozentangabe der Anteile einer Liste ausgeben
Mit Hilfe der ratio_to_report() kann der Prozentuale Anteil an der Ergebnismenge angezeigt werden.
Beispiel 5 - gleitende Summen berechnen bzw. kumulative Werte aufsummieren - Fensterfunktion verwenden
Mit Hilfe einer Fensterfunktion soll zum Beispiel die Summe der letzen drei jeweiligen Monate errechnet werden.
Beispiel 6 - Ein Listen von Werten in SQL erstellen
Aufgabe: Ein separierte Liste soll aus den Werten einer SQL Abfrage erstellt werden.
Vor 11g ⇒ siehe Eine eigene Aggregat Funktion für eine group by Abfrage erstellen
Lösung mit listagg:
SQL>SELECT deptno , listagg(ename,':') WITHIN GROUP (ORDER BY ename) AS emp_list FROM emp GROUP BY deptno / DEPTNO EMP_LIST ---------- --------------------------------- 10 CLARK:KING:MILLER 20 ADAMS:JONES 30 ALLEN:MARTIN:TURNER:WARD
Mit listagg kann eine Liste bis maximal 4000 Zeichen aggregiert werden.
Quelle, siehe http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions089.htm und http://www.oracle-developer.net/display.php?id=515