Haben Sie die Funktionen von SQL Window verwendet? Benötigen Sie einige schnelle Beispielabfragen, die Sie bei der Arbeit mit relationalen Datenbanken immer wieder durchsehen können, oder einen Spickzettel, den Sie in Ihren Arbeitsablauf als Entwickler einbauen können?
Aus diesem Grund haben wir dieses Tutorial erstellt, das Ihnen helfen soll, Ihre SQL-Operationen zu verbessern. Wenn Sie noch nicht mit SQL-Fensterfunktionen gearbeitet haben, ist dieser Beitrag ein guter Anfang.
Window-Funktionen sind Berechnungsfunktionen, die die Komplexität von SQL-Abfragen reduzieren und deren Effizienz erhöhen. Sie bestehen aus zwei Komponenten: einem Fenster, einer Reihe von Zeilen, und Funktionen, die vordefinierte SQL-Codeblöcke zur Durchführung von Datenoperationen enthalten. Mit den Funktionen des SQL-Fensters können Sie erweiterte Analysen durchführen, ohne komplexe Abfragen schreiben zu müssen.
Bei der Analyse oder Erstellung von Datenberichten können Sie SQL-Fensterfunktionen zum Aggregieren oder Vergleichen von Daten innerhalb bestimmter Fenster von Zeilen verwenden. Mit diesen Funktionen können Sie Self-Joins oder Unterabfragen vermeiden, Daten aggregieren, ohne die Ergebnisse auf einen einzigen Wert für eine ganze Tabelle zusammenzufassen, und Werte für Zeilen mit Hilfe von Berechnungen wie Summen, Prozentsätzen oder sogar Rankings vergleichen.
Die SQL-Fensterfunktionen funktionieren in drei einfachen Schritten. Zunächst definieren Sie ein Fenster. Denn die Fensterfunktionen arbeiten mit einer Reihe von Zeilen, die mit der OVER() -Klausel definiert wurden. Als nächstes unterteilt die PARTITION BY-Klausel die Ergebnismenge in Partitionen, auf die die Funktion angewendet wird. Und schließlich die ORDER by-Klausel, um die Reihenfolge der Zeilen in jeder Partition zu bestimmen.
HINWEIS: Windowing in SQL ist nicht zu verwechseln mit Aggregation. Bei der Aggregation handelt es sich um herkömmliche Funktionen (z.B. SUM und AVG), die auf mehrere Zeilen angewendet werden und diese zu einem einzigen Ergebnis zusammenfassen. Zur Unterscheidung sollten Sie sich daran erinnern, dass Window-Funktionen mit einem Fenster (einer bestimmten Menge von Zeilen) arbeiten und einzelne Zeilen in ihrer Ausgabe beibehalten.
Lassen Sie uns die Arbeit mit SQL-Fensterfunktionen praktisch angehen. Für jede Kategorie erhalten Sie eine tabellarische Zusammenfassung zum schnellen Nachschlagen.
Syntax von SQL-Fensterfunktionen
Die allgemeine Syntax für Fensterfunktionen umfasst drei Komponenten: die Funktion selbst, die OVER-Klausel
und ein optionales PARTITION BY
. Im Folgenden finden Sie eine Aufschlüsselung der einzelnen Komponenten.
#1. Funktion
Die Funktion gibt die Berechnungsoperation an, auf die Sie mit der Zeile abzielen. Es kann sich um standardmäßige Aggregatfunktionen handeln (z.B. SUM
, AVG
und COUNT
). Oder eine analytische Funktion (z.B. ROW_NUMBER
, RANK
, LEAD
und LAG).
Hier ein Beispiel mit der Funktion SUM
.
SELECT
spalte1,
spalte2,
spalte3,
SUM(spalte3) OVER () AS total_weight
FROM
ihre_tabelle;
#2. OVER-Klausel
Mit der OVER-Klausel
definieren Sie die Zeilen, auf die die Funktion angewendet werden soll. Es gibt zwei Bestandteile: PARTITION BY
und ORDER BY
. Ersteres ist optional und unterteilt die Ergebnisse in Abschnitte, auf die die Fensterfunktion angewendet wird.
Bei letzterem geben Sie die Reihenfolge der Zeilen in jeder Partition an. Wenn nichts angegeben wird, behandelt die Funktion das Fenster als ungeordnete Menge. Hier ist ein Beispiel.
SELECT
spalte1,
spalte2,
spalte3,
SUM(column3) OVER (PARTITION BY column1 ORDER BY column2) AS running_total_weight
FROM
ihre_tabelle;
#3. PARTITION BY-Klausel
Diese optionale Klausel unterteilt das Ergebnis in Partitionen, auf die die Fensterfunktion angewendet wird. Die Superkraft dieser Klausel kommt zum Tragen, wenn Sie mit jeder Partition unabhängige Berechnungen durchführen. Hier ist eine Illustration.
SELECT
spalte1,
spalte2,
spalte3,
AVG(column3) OVER (PARTITION BY column1) AS avg_weight_per_group
FROM
ihre_tabelle;
Für das obige Beispiel berechnet die Funktion AVG
den Durchschnitt von Spalte3
unabhängig für jeden einzelnen Wert in Spalte1
. Einfach ausgedrückt, erhalten Sie für jede Gruppe von Elementen in Spalte1
die Spalte3
mit dem durchschnittlichen Gewicht für dieses spezifische Element.
Die allgemeine Syntax für eine Window-SQL-Funktion lautet:
SELECT
spalte1,
spalte2,
spalte3,
SUM(column3) OVER (PARTITION BY column1 ORDER BY column2) AS window_function_result
FROM
ihre_tabelle;
Die obige Syntax kann je nach gewählter Datenbank leicht variieren, aber die Gesamtstruktur bleibt konsistent.
Aggregierte Fensterfunktionen in SQL
Aggregat-Fensterfunktionen in SQL verwenden die vorherrschenden Aggregatfunktionen wie COUNT()
oder SUM()
, wobei sie die Definition der Aggregation und das Format der Ergebnisse ändern. Das heißt, sie führen Berechnungen in einem Fenster durch, das sich auf die aktuelle Zeile innerhalb der Ergebnismenge bezieht. Sie können sie verwenden, um aggregierte Werte auf der Grundlage eines bestimmten Fensters/Frames zu erhalten. Im Folgenden finden Sie eine kurze Beschreibung der einzelnen Funktionen.
#1. MIN()
Diese Funktion gibt den Mindestwert eines angegebenen Ausdrucks über einen Rahmen zurück.
MIN(Spalte) OVER (PARTITION BY partition_ausdruck ORDER BY sort_ausdruck
ROWS BETWEEN start AND end)
Schauen wir uns eine Beispielabfrage an, insbesondere das gleitende, rollende oder rollierende Minimum. In diesem Beispiel wird der Mindestwert für jede Zeile in der Ergebnismenge für einen bestimmten Bereich von Zeilen um diese Zeile herum berechnet.
SELECT
spalte1,
spalte2,
MIN(column2) OVER (ORDER BY date_column ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_min
FROM
ihre_tabelle;
Spalte1
und Spalte2
sind also die Spalten, die Sie auswählen, MIN(Spalte2)
ist die Aggregatfunktion, die den Mindestwert berechnet, und OVER(ORDER BY some_column ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) definiert das Fenster für die Berechnung. Sie gibt das Fenster an, das die aktuelle Zeile und die beiden vorangehenden Zeilen umfasst, und zwar auf der Grundlage des Ordnungsbezeichners some_column. Dies wiederum legt fest, dass jede Zeile in der Ergebnismenge moving_min
den Mindestwert von Spalte2
enthält. Beachten Sie, dass ich die PARTITION BY-Klausel
nicht eingefügt habe.
#2. MAX()
Unsere Funktion hier gibt den maximalen Wert eines angegebenen Ausdrucks über ein Fenster zurück. Hier ist die Syntax.
MAX(column) OVER (PARTITION BY partition_expression ORDER BY sort_expression
ROWS BETWEEN start AND end)
Hier ist eine Beispielabfrage, die das laufende Maximum einer Spalte über die gesamte Ergebnismenge, geordnet nach der Spalte date_
, berechnet.
SELECT
spalte,
MAX(Spalte) OVER (ORDER BY date_column ROWS UNBOUNDED PRECEDING) AS running_max
FROM
ihre_tabelle;
#3. AVG()
Diese Funktion gibt den Durchschnittswert eines angegebenen Ausdrucks über einen Rahmen zurück. Prüfen Sie die Syntax.
AVG(column) OVER (PARTITION BY partition_expression ORDER BY sort_expression
ROWS BETWEEN start AND end)
Als Beispiel für eine Abfrage sehen Sie sich das folgende Beispiel an, in dem die Abfrage den Durchschnitt über ein Fenster berechnet, das die aktuelle Zeile, die davor liegende und die danach folgende Zeile, geordnet nach der Spalte date_
, umfasst.
SELECT
spalte,
AVG(column) OVER (ORDER BY date_column ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS moving_avg
FROM
ihre_tabelle;
#4. SUMME()
Diese Funktion wird verwendet, wenn Sie die Summe eines bestimmten Ausdrucks über einen Rahmen zurückgeben möchten. Nachfolgend finden Sie die Syntax.
SUM(column) OVER (PARTITION BY partition_expression ORDER BY sort_expression
ROWS BETWEEN start AND end)
Betrachten Sie als Beispiel für eine Abfrage die kumulative Summe unten. In diesem Fall berechnet die Abfrage die Summe einer Spalte über die gesamte Ergebnismenge, geordnet nach der Spalte date_column
.
SELECT
spalte,
SUM(column) OVER (ORDER BY date_column ROWS UNBOUNDED PRECEDING) AS cumulative_sum
FROM
ihre_tabelle;
#5. ZAEHLEN()
Eine Funktion, mit der Sie die Anzahl der Zeilen in einem Fenster zurückgeben können. Ihre Syntax kann wie folgt geschrieben werden:
COUNT(column) OVER (PARTITION BY partition_expression ORDER BY sort_expression
ROWS BETWEEN start AND end)
Betrachten Sie als Anwendungsbeispiel den folgenden Fall, in dem die Abfrage die laufende Zählung der Zeilen über die gesamte Ergebnismenge, geordnet nach der Spalte date_
, berechnet.
SELECT
spalte,
COUNT(column) OVER (ORDER BY date_column ROWS UNBOUNDED PRECEDING) AS running_count
FROM
ihre_tabelle
Hier ist ein kurzer Spickzettel für die Funktionen des Aggregatfensters.
Funktion | Zweck | Verwendung Beispiel |
---|---|---|
MIN() | Gibt den Mindestwert eines angegebenen Ausdrucks über einen Rahmen zurück. | MIN(Spalte) OVER (ORDER BY date_column ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) – Berechnet das gleitende Minimum für jede Zeile. |
MAX() | Gibt den Maximalwert eines angegebenen Ausdrucks über ein Fenster zurück. | MAX(column) OVER (ORDER BY date_column ROWS UNBOUNDED PRECEDING) – Berechnet das laufende Maximum über die gesamte Ergebnismenge |
AVG() | AVG() Gibt den Durchschnittswert eines angegebenen Ausdrucks über einen Rahmen zurück. | AVG(column) OVER (ORDER BY date_column ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) – Berechnet den gleitenden Durchschnitt über ein Fenster. |
SUMME() | Gibt die Summe eines angegebenen Ausdrucks über einen Rahmen zurück. | SUM(column) OVER (ORDER BY date_column ROWS UNBOUNDED PRECEDING) – Berechnet die kumulative Summe über die gesamte Ergebnismenge. |
ZAEHLEN() | Gibt die Anzahl der Zeilen in einem Fenster oder die Gesamtzahl der Zeilen zurück. | COUNT(column) OVER (ORDER BY date_column ROWS UNBOUNDED PRECEDING) – Berechnet die laufende Zählung der Zeilen über die gesamte Ergebnismenge. |
Wertfensterfunktionen in SQL
In SQL werden Wertfensterfunktionen verwendet, wenn Zeilenwerte aus anderen Zeilen zugewiesen werden. Im Gegensatz zu Aggregatfunktionen, die einen einzelnen Wert für jede Gruppe zurückgeben, geben sie einen Wert für jede Zeile in einem bestimmten Fenster oder Rahmen von Zeilen zurück.
Dieses Operationsmodell wiederum ermöglicht Ihnen den Zugriff auf Daten aus anderen Zeilen in Bezug auf das aktuelle Fenster, was leistungsstarke Analyse- und Berichtsfunktionen ermöglicht.
Im Folgenden finden Sie einen kurzen Überblick über die einzelnen Wertfensterfunktionen.
#1. LEAD()
Die SQL-Fensterfunktion LEAD()
funktioniert im Gegensatz zu LAG()
und wird verwendet, um die Werte der nachfolgenden Zeilen zurückzugeben. Vereinfacht gesagt, verschiebt sie die Werte um eine Zeile nach oben. Die Syntax für den Aufruf dieser Funktion ist ähnlich wie die von LAG()
. So schreiben Sie es.
LEAD(Spalte, Versatz, Standardwert) OVER (PARTITION BY partition_ausdruck ORDER BY sort_ausdruck)
Für Ihre Beispielabfrage sehen Sie sich den folgenden Fall an, der den nächsten Wert einer Spalte auf der Grundlage des Ordnungskriteriums `Datum_Spalte` abruft, mit einem Standardwert 0, wenn es keinen nächsten Wert gibt.
SELECT
spalte,
LEAD(column, 1, 0) OVER (ORDER BY date_column) AS lead_value
FROM
ihre_tabelle;
#2. LAG()
Die Funktion LAG()
ist die beliebteste. Sie weist jeder Zeile einen Wert der vorangegangenen Zeile zu. Mit anderen Worten, sie verschiebt jede Spalte um eine Zeile, so dass Sie Abfragen mit verschobenen Werten durchführen können. In solchen Fällen schließt die Window-Funktion die ORDER BY-Klausel
in die OVER-Klausel
ein, da der Aspekt der Reihenfolge berücksichtigt werden muss. Die Syntax lautet wie folgt:
LAG(spalte, offset, default_value) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
Eine Beispielabfrage kann wie folgt geschrieben werden. Die Abfrage extrahiert den vorherigen Wert einer Spalte, geordnet nach der Spalte date_column
. Wenn es keinen vorherigen Wert gibt, wird ein Standardwert von 0 verwendet.
SELECT
spalte,
LAG(Spalte, 1, 0) OVER (ORDER BY date_column) AS lag_value
FROM
ihre_tabelle;
#3. ERSTER_WERT()
Mit dieser Funktion können Sie den Wert eines angegebenen Ausdrucks für die erste Zeile innerhalb eines Fensters abrufen. Die Syntax:
ERSTER_WERT(Spalte) OVER (PARTITION BY partition_ausdruck ORDER BY sort_ausdruck)
Beispiel:
SELECT
spalte,
FIRST_VALUE(column) OVER (PARTITION BY category_column ORDER BY date_column) AS first_value
FROM
ihre_tabelle;
Die Abfrage ruft den letzten Wert einer Spalte innerhalb jeder Partition ab, geordnet nach der Spalte date_column
.
#4. LAST_VALUE()
Mit dieser Funktion können Sie den letzten Wert einer bestimmten Spalte innerhalb eines bestimmten Rahmens abfragen. Die Syntax:
LAST_VALUE(Spalte) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
Beispiel:
SELECT
spalte,
LAST_VALUE(column) OVER (PARTITION BY category_column ORDER BY date_column) AS last_value
FROM
ihre_tabelle;
Jetzt sollte es ein wenig offensichtlich sein…
#5. N_TH VALUE()
Als letztes Gruppenmitglied kann diese Funktion den Wert an einer bestimmten Position innerhalb eines Fensterrahmens abrufen. Sie geben auch den Ausdruck an, mit dem Sie den n-ten Wert abrufen möchten. Der Ausdruck kann eine Spalte, ein mathematischer Ausdruck oder ein beliebiger gültiger SQL-Ausdruck sein, der die Daten repräsentiert, an denen Sie interessiert sind. Für unsere Beispiele haben wir eine Spalte verwendet. Das gilt auch für LAST_VALUE()
und FIRST_VALUE()
.
Die Syntax:
NTH_VALUE(Spalte, n) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
Beispiel:
SELECT
spalte,
NTH_VALUE(column, 3) OVER (PARTITION BY category_column ORDER BY date_column) AS third_value
FROM
ihre_tabelle;
Funktion | Zweck | Verwendung Beispiel |
---|---|---|
LEAD() | Gibt die Werte der nachfolgenden Zeilen innerhalb eines Fensters zurück. | LEAD(column, 1, 0) OVER (ORDER BY date_column) AS lead_value – Ruft den nächsten Wert auf der Grundlage des Ordnungskriteriums ab, mit einem Standardwert, wenn es keinen nächsten Wert gibt. |
LAG() | Gibt die Werte der vorangehenden Zeilen innerhalb eines Fensters zurück. | LEAD(column, 1, 0) OVER (ORDER BY date_column) AS lead_value – Ruft den nächsten Wert auf der Grundlage des Ordnungskriteriums ab, mit einem Standardwert, wenn es keinen nächsten Wert gibt. |
ERSTER_WERT() | Ruft den Wert eines angegebenen Ausdrucks für die erste Zeile innerhalb eines Fensters ab. | ERSTER_WERT(Spalte) OVER (PARTITION BY KATEGORIE_SPALTE ORDER BY DATUMSSPALTE) AS ERSTER_WERT – Ruft den ersten Wert innerhalb jeder Kategorie basierend auf der Reihenfolge des Datums ab. |
LETZTER_WERT() | Ruft den letzten Wert eines angegebenen Ausdrucks innerhalb eines definierten Rahmens ab. | LAST_VALUE(column) OVER (PARTITION BY category_column ORDER BY date_column) AS last_value – Ruft den letzten Wert innerhalb jeder Kategorie auf der Grundlage der Datumsreihenfolge ab. |
NTH_VALUE() | Ruft den Wert an einer bestimmten Position innerhalb eines Fensterrahmens ab. | NTH_VALUE(column, 3) OVER (PARTITION BY category_column ORDER BY date_column) AS third_value – Ermittelt den dritten Wert innerhalb jeder Kategorie basierend auf der Datumsreihenfolge. |
Ranking-Fenster-Funktion in SQL
Ranking Window-Funktionen in SQL sind hilfreich, wenn Sie Zeilen innerhalb einer Ergebnismenge auf der Grundlage eines bestimmten Ordnungskriteriums Nummern (Ränge oder Positionen) zuweisen möchten. Sie sind nützlich, wenn Sie Daten analysieren und ordnen und die relativen Positionen von Zeilen ermitteln wollen.
Wenn Fensterfunktionen nicht zur Verfügung stehen, müssten Sie mehrere verschachtelte Abfragen schreiben, was ineffizient ist. Das Wichtigste bei Ranking-Fensterfunktionen: Die ORDER BY-Klausel
muss immer vorhanden sein. Im Folgenden finden Sie kurze Erläuterungen zu den Ranking-Funktionen in der Familie.
#1. RANK()
Die Funktion RANK()
ist die gebräuchlichste und weist Ranking-Werte auf der Grundlage der von Ihnen angegebenen Reihenfolge zu. Ihre Syntax..
RANK() OVER (PARTITION BY partition_ausdruck ORDER BY sort_ausdruck
Um das zu verdeutlichen, sehen Sie sich die folgende Abfrage an. Sie weist jedem Mitarbeiter einen Rang auf der Grundlage der Verkaufsleistung zu; die höchsten Umsätze erhalten den niedrigsten Rang.
SELECT
mitarbeiter_id,
umsatz,
RANK() OVER (ORDER BY sales DESC) AS sales_rank
FROM
sales_table;
#2. DENSE RANK()
Diese Funktion funktioniert ähnlich wie `RANK()`, hat aber ein entscheidendes Unterscheidungsmerkmal: Wenn es in dem Datensatz Gleichstände gibt, erhalten sie denselben Rangwert. Es überspringt keine Zahlen und ordnet die nachfolgenden Werte der nachfolgenden Zeile zu. Schreiben Sie es als..
DENSE_RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression)
Betrachten Sie für Ihren Testfall die folgende Abfrage. Sie weist jedem Schüler einen dichten Rang auf der Grundlage von test_score
zu und lässt keine Lücken, auch nicht bei Punktegleichstand.
SELECT
student_id,
test_score,
DENSE_RANK() OVER (ORDER BY test_score DESC) AS score_rank
FROM
scores_table
#3. ROW NUMBERS()
Das ist die einfachste von allen. Wenn Sie der durch die ORDER BY-Klausel
im Unterabschnitt OVER
definierten Reihenfolge folgen, erhalten alle Zeilen Nummern, beginnend mit 1. Die Syntax lautet wie folgt..
ROW_NUMBER() OVER (PARTITION BY partition_expression ORDER BY sort_expression)
In der folgenden Beispielabfrage weisen wir jedem Produktartikel eindeutige Zeilennummern zu, basierend auf den Umsätzen
, beginnend mit 1 vom höchsten Umsatz.
SELECT
produkt_id,
kategorie,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) AS row_num
FROM
produkte_tabelle;
#4. PERCENT_RANK()
Diese Funktion verwendet die Funktion RANK
, um die endgültige Rangfolge zu definieren. Sie zielt darauf ab, eine relative Rangfolge für die Zeilen in der Ergebnismenge zu erstellen, die als Prozentsatz ausgedrückt wird, so dass das Ergebnis zwischen 0 und 1 liegt. Der Wert 0 wird der ersten Zeile zugewiesen und 1 der letzten. Die Syntax lautet..
PERCENT_RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression)
Hier ist eine Abfrage, bei der wir jedem Mitarbeiter einen Rang auf der Grundlage seiner Verkaufsleistung zuweisen.
SELECT
kunden_id,
umsatz,
PERCENT_RANK() OVER (ORDER BY revenue DESC) AS revenue_percent_rank
FROM
umsatz_tabelle;
#5. QCUT (NTILE)
Diese Funktion wird zwar selten verwendet, funktioniert aber wie ROW_NUMBER
. Allerdings geben Sie einer Sammlung von Zeilen (Buckets) Nummern, anstatt Zeilen zu nummerieren. Die Anzahl der Bereiche wird als Argument an die Funktion N-TILE
übergeben. Beispiel: N-TILE(10)
unterteilt den Datensatz in 10 Bereiche. Die Syntax lautet..
NTILE(Anzahl_der_Eimer) OVER (PARTITION BY partition_ausdruck ORDER BY sort_ausdruck)
Das folgende Beispiel teilt die Mitarbeiter in Quartile ein, wie in der Funktion beschrieben.
SELECT
mitarbeiter_id,
gehalt,
NTILE(4) OVER (ORDER BY gehalt) AS gehalt_quartil
FROM
mitarbeiter_gehalt_tabelle;
#6. CUME_DIST
Als letztes Mitglied berechnet es die kumulative Verteilung eines Wertes innerhalb eines sortierten Datensatzes. Er weist einen Wert zwischen 0 und 1 zu, um die relativen Positionen der Zeilen darzustellen. 0 am Anfang und 1 am Ende. Syntax:
CUME_DIST() OVER (PARTITION BY partition_expression ORDER BY sort_expression)
Für das folgende Beispiel wertet die Abfrage die Verteilung der Kunden nach Alter aus, mit einem Prozentsatz der Kunden, der entweder kleiner oder gleich der aktuellen Zeile ist.
SELECT
kunden_id,
alter,
CUME_DIST() OVER (ORDER BY age) AS age_cume_dist
FROM
kunden_daten;
Eine Kurzreferenz für die Funktionen des Ranking-Fensters finden Sie unten.
Funktion | Zweck | Verwendung Beispiele |
---|---|---|
RANK() | Weist Rangwerte basierend auf der angegebenen Reihenfolge zu. | RANK() OVER (ORDER BY sales DESC) AS sales_rank – Weist jedem Mitarbeiter einen Rang auf der Grundlage der Verkaufsleistung zu. |
DENSE_RANK() | Ähnlich wie RANK(), behandelt jedoch Gleichstände ohne Lücken. | DENSE_RANK() OVER (ORDER BY test_score DESC) AS score_rank – Weist den Schülern einen dichten Rang auf der Grundlage der Testergebnisse zu. |
ROW_NUMBER() | Weist eindeutige Zeilennummern nach der ORDER BY Klausel zu. | ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) AS row_num – Weist den Produkten Zeilennummern auf der Grundlage der Verkäufe innerhalb jeder Kategorie zu. |
PERCENT_RANK() | Legt die relative Rangfolge als Prozentsatz (0 bis 1) fest. | PERCENT_RANK() OVER (ORDER BY revenue DESC) AS revenue_percent_rank – Weist den Kunden einen prozentualen Rang auf der Grundlage des Umsatzes zu. |
NTILE(Anzahl_von_Eimern) | Teilt die Zeilen in die angegebenen Bereiche ein | NTILE(4) OVER (ORDER BY gehalt) AS gehalt_quartil – Teilt die Mitarbeiter auf der Grundlage ihres Gehalts in Quartile ein. |
CUME_DIST() | Berechnet die kumulative Verteilung (0 bis 1) von Werten. | CUME_DIST() OVER (ORDER BY age) AS age_cume_dist – Bewertet die kumulative Verteilung von Kunden basierend auf dem Alter, dargestellt als Prozentsatz. |
Schlussfolgerung
In diesem Artikel haben wir die SQL-Fensterfunktionen vorgestellt, eine feine Technik, um durch Ihre SQL-Abfragen zu gehen und Ihre Datenoperationen zu vereinfachen. Wir haben uns die verfügbaren Modelle für Window-Funktionen angesehen, ihre Syntax vorgestellt, eine Vorschau auf ihre Beispiele gegeben, ihre Verwendung erläutert und mit einem Beispiel-Spickzettel abgeschlossen, den Sie in Ihren Datenworkflow übernehmen können.
Natürlich kann die Syntax je nach der von Ihnen gewählten Datenbank unterschiedlich sein. Achten Sie darauf, die richtige Syntax für Ihre Wahl zu finden. Schauen Sie zur weiteren Erkundung immer in die Dokumentation. Das bedeutet, dass Sie mit der richtigen arbeiten müssen, egal ob es sich um SQL oder PostgreSQL handelt.
Sie können sich jetzt unseren vollständigen SQL-Spickzettel ansehen, den mein Kollege und ich bei unserer täglichen Arbeit als Entwickler verwenden.