ProgrammierungSQL-Analyst

Wie unterscheidet sich die Aggregatfunktion SUM() von der Fensterfunktion SUM()? In welchen Aufgaben ist es besser, Fensterfunktionen zu verwenden? Geben Sie ein Beispiel an.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort

Die Aggregatfunktion SUM() summiert Werte über die gesamte Gruppe von Zeilen im Ergebnissatz und gibt einen Wert für jede Gruppe (oder für die gesamte Abfrage) zurück. Die Fensterfunktion SUM() ermöglicht das Berechnen der Summe über ein "Fenster" von Werten, das innerhalb des SELECTs (über OVER()) definiert ist, dabei bleibt jede Zeile im Ergebnis erhalten und erhält Zugriff auf das aggregierte Ergebnis innerhalb ihres "Fensters". Dies ist besonders praktisch, um Zwischenaggregate von Gruppen zu erhalten.

Beispiel für eine Aggregatfunktion:

SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;

Beispiel für eine Fensterfunktion:

SELECT department_id, salary, SUM(salary) OVER (PARTITION BY department_id ORDER BY hire_date) FROM employees;

Fangfrage

“Kann man eine kumulative („laufende“) Summe über eine Spalte nur mit der Aggregatfunktion GROUP BY erhalten?”

Antwort: Nein! GROUP BY liefert nur die endgültigen Aggregate, eine laufende Summe erfordert entweder eine Fensterfunktion oder komplexe Unterabfragen, die schwieriger und langsamer sind.

Beispiel:

SELECT salary, SUM(salary) OVER (ORDER BY hire_date) AS running_total FROM employees;

Geschichte

Im Transaktionsbericht wurde die laufende Summe durch mehrere korrelierte Unterabfragen realisiert. Mit dem Wachstum der Tabelle fiel die Leistung um ein Vielfaches. Durch die Umstellung auf die Fensterfunktion kehrte alles in Sekunden zurück.


Geschichte

Der Versuch, komplexe Analysen mit Aggregaten pro Gruppen über GROUP BY zu erstellen, führte zu mehreren Etappen der Extraktion und Verarbeitung in externer Software. Fensterfunktionen ermöglichten es, den benötigten Bericht in einer SQL-Abfrage zu erstellen.


Geschichte

Ein Analyst schrieb eine Abfrage mit Fensterfunktionen und verwendete eine falsche PARTITION BY — die Ergebnisse für verschiedene Gruppen vermischten sich. Das Ergebnis — verzerrte Berichterstattung. Nach der Korrektur der Gruppeneinteilung wurden die Daten korrekt.