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:
Vorgänger/Nachfolger finden
z.B.
In einer Tabelle soll eine normalerweise fortlaufende Nummer auf Lücken geprüft werden:
Ranking Funktionen:
Mit der rank() Funktion kann dem Ergebnis einer Abfrage ein Rang pro Ergebnis zu geordnet werden.
Mit Hilfe der row_number() Funktion doppelte Daten identifizieren
Mit Hilfe der ratio_to_report() kann der Prozentuale Anteil an der Ergebnismenge angezeigt werden.
Mit Hilfe einer Fensterfunktion soll zum Beispiel die Summe der letzen drei jeweiligen Monate errechnet werden.
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