Kursinhalt
Fortgeschrittene Techniken in SQL
Fortgeschrittene Techniken in SQL
Fensterfunktionen
Fensterfunktionen sind eine Kategorie von SQL-Funktionen, die Berechnungen über eine Reihe von Zeilen durchführen, die mit der aktuellen Zeile innerhalb eines definierten Fensters oder einer Partition verbunden sind.
Sie werden verwendet, um Berechnungen und Analysen über eine Teilmenge von Zeilen ohne Reduzierung der Ergebnismenge durchzuführen, im Gegensatz zu Aggregatfunktionen, die typischerweise die Anzahl der von einer Abfrage zurückgegebenen Zeilen reduzieren.
Erklärung
Angenommen, wir haben die folgende Sales
-Tabelle:
Wenn unser Ziel darin besteht, den Gesamtumsatz für jedes spezifische Produkt zu berechnen und ihn in einer zusätzlichen Spalte innerhalb der Haupttabelle anzuzeigen, anstatt eine neue gruppierte Tabelle zu erstellen, könnte das Ergebnis wie folgt aussehen:
Aber wie können wir das machen?
Die Verwendung von GROUP BY
ist für diese Aufgabe nicht geeignet, da diese Klausel die Anzahl der Zeilen reduziert, indem sie sie nach bestimmten Kriterien gruppiert, was dazu führt, dass nur die IDs und ihre entsprechenden Summenwerte zurückgegeben werden.
Deshalb sind Fensterfunktionen unerlässlich, um dieses Problem zu lösen.
Implementierung
Wir können das erforderliche Ergebnis mit der folgenden Abfrage erhalten:
SELECT sales_id, product_id, sales_date, amount, SUM(amount) OVER (PARTITION BY product_id) AS Total_Revenue_Per_Product FROM Sales;
Eine allgemeine Syntax zur Erstellung einer Fensterfunktion kann wie folgt beschrieben werden:
- SELECT: Gibt an, dass eine Abfrage beginnt;
- aggregation_func(): Die Aggregatfunktion (z.B.
SUM
,AVG
,COUNT
), die eine Berechnung über eine Menge von Zeilen durchführt, die durch das Fenster definiert sind; - OVER: Schlüsselwort, das die Fensterfunktion einleitet;
- PARTITION BY: Teilt das Ergebnisset in Partitionen basierend auf den Werten der angegebenen Spalte(n). Die Fensterfunktion arbeitet separat auf jeder Partition;
- partition_column: Die Spalte, die zur Partitionierung des Ergebnisses verwendet wird.
- ORDER BY: Gibt die Reihenfolge der Zeilen innerhalb jeder Partition an;
- order_column: Die Spalte, die zur Sortierung der Zeilen innerhalb jeder Partition verwendet wird.
- FROM: Gibt die Quelltabelle an, aus der die Daten abgerufen werden;
- table_name: Der Name der Tabelle, aus der die Daten ausgewählt werden.
Danke für Ihr Feedback!