Leser wie Sie helfen, MUO zu unterstützen. Wenn Sie über Links auf unserer Website einen Kauf tätigen, erhalten wir möglicherweise eine Affiliate-Provision. Weiterlesen.

Die Vielseitigkeit von SQL als DBMS-Abfragesprache ist im Laufe der Jahre gestiegen. Sein umfassender Nutzen und seine Vielseitigkeit machen es zu einem absoluten Favoriten für jeden Datenanalysten.

Neben den regulären SQL-Funktionen gibt es noch einige fortgeschrittene Funktionen. Diese Funktionen sind allgemein als Fensterfunktionen bekannt. Wenn Sie mit komplexen Daten arbeiten und erweiterte Berechnungen durchführen möchten, können Sie sie verwenden, um Ihre Daten optimal zu nutzen.

Die Bedeutung von Fensterfunktionen

In SQL sind mehrere Fensterfunktionen verfügbar, die Ihnen bei der Durchführung einer Reihe von Berechnungen helfen. Von der Erstellung von Partitionen über die Rangfolge von Zeilen bis hin zur Zuweisung von Zeilennummern, diese Fensterfunktionen erledigen ein bisschen von allem.

Fensterfunktionen sind nützlich, wenn Sie Aggregatfunktionen auf ein bestimmtes Dataset oder eine Sammlung von Zeilen anwenden. Diese Funktionen gehen über die von GROUP BY bereitgestellten Aggregationsfunktionen hinaus. Der Hauptunterschied besteht jedoch darin, dass Ihre Daten im Gegensatz zur Gruppierungsfunktion nicht zu einer einzigen Zeile zusammengefasst werden.

instagram viewer

Sie können innerhalb von keine Fensterfunktionen verwenden WO, AUS, Und GRUPPIERE NACH Aussagen.

Syntax einer Fensterfunktion

Wenn Sie auf eine beliebige Fensterfunktion verweisen, müssen Sie der Standard-Syntaxstruktur folgen, damit sie korrekt funktioniert. Wenn Sie den Befehl falsch strukturieren, erhalten Sie eine Fehlermeldung und Ihr Code wird nicht ausgeführt.

Hier ist die Standard-Syntax:

WÄHLEN Spaltenname1,
{window_function}(Spaltenname2)
OVER([PARTITION BY Spaltenname1] [ORDER BY Spaltenname3]) AS neue_Spalte
FROM Tabellenname;

Wo:

  • Spaltenname1 ist der erste Spaltenname, den Sie auswählen möchten.
  • {window_function} ist der Name einer Aggregatfunktion wie sum, avg, count, row_number, rank oder dense_rank.
  • Spaltenname2 ist der Name der Spalte, auf die Sie die Fensterfunktion anwenden.
  • Spaltenname3 ist der dritte Spaltenname, der die Basis für die Partitionierung bildet.
  • neue_spalte ist eine Bezeichnung für die neue Spalte, die Sie mit anwenden können ALS Stichwort.
  • Tabellenname ist der Name der Quelltabelle.

Fensterfunktionen unterscheiden sich von einigen der die meisten grundlegenden SQL-Befehle. Im Gegensatz zu Aggregatfunktionen in SQL können Sie diese Fensterfunktionen verwenden, um erweiterte Funktionen auszuführen.

Vorbereiten des Datensatzes

Du kannst den... benutzen TABELLE ERSTELLEN Aussage zu Erstellen Sie eine neue Tabelle in SQL. Hier ist ein Beispieldatensatz, den dieser Leitfaden verwendet, um einige Fensterfunktionen zu definieren:

Auftragsdatum

Kategorie

Farbe

Verkaufspreis

Menge

08-11-2016

Telefone

Schwarz

907.152

6

12-06-2016

Binder

Grün

18.504

3

11-10-2015

Haushaltsgeräte

Gelb

114.9

5

11-10-2015

Tische

Braun

1706.184

9

09-06-2014

Telefone

Rot

911.424

4

09-06-2014

Papier

Weiss

15.552

3

09-06-2014

Binder

Schwarz

407.976

3

09-06-2014

Haushaltsgeräte

Gelb

68.81

5

09-06-2014

Binder

Grün

2.544

3

09-06-2014

Lagerung

Orange

665.88

6

09-06-2014

Lagerung

Orange

55.5

2

15-04-2017

Telefone

Schwarz

213.48

3

05-12-2016

Binder

Grün

22.72

4

22-11-2015

Haushaltsgeräte

Grün

60.34

7

22-11-2015

Stühle

Dunkelbraun

71.372

2

13-05-2014

Möbel

Orange

190.92

5

Die Summenfunktion erklärt

Angenommen, Sie möchten den Gesamtumsatz für jeden Wert in der Kategoriespalte berechnen. So können Sie es tun:

WÄHLENKategorie, Farbe,
Summe (Verkaufspreis)
OVER (sortiert nach Kategorie) AS total_sales
VON sahil.sample;

Im obigen Code ruft die SQL-Anweisung die Kategorie und Farbe aus dem ursprünglichen Dataset ab. Die Summenfunktion addiert die Spalte sale_price. Dies geschieht nach Kategorie, da die OVER-Klausel die Sortierung nach Kategoriespalte angibt. Das Endergebnis sieht wie folgt aus:

So verwenden Sie die Fensterfunktion Avg()

Wie bei der Summenfunktion können Sie mit der den Durchschnitt pro Datenzeile berechnen durchschn Funktion. Anstelle der Summe erhalten Sie eine Spalte mit den durchschnittlichen Umsätzen.

WÄHLENKategorie, Farbe,
durchschn. (sale_price)
OVER (sortiert nach Kategorie) AS avg_sales
VON sahil.sample;

Erfahren Sie, wie Sie die Fensterfunktion Count() verwenden

Ähnlich wie die Sum- und Avg-Funktionen ist die Count-Window-Funktion in SQL ziemlich einfach und funktioniert nach dem gleichen Prinzip wie die beiden anderen Funktionen. Wenn Sie die Zählfunktion übergeben, erhalten Sie die Gesamtzahl jedes Werts in der neuen Spalte.

So können Sie die Anzahl berechnen:

WÄHLENKategorie, Farbe,
zählen (Kategorie)
OVER (sortiert nach Kategorie) AS item_count
VON sahil.sample;

Die Fensterfunktion Row_Number()

Anders als einige der anderen oben aufgeführten Fensterfunktionen funktioniert row_number() etwas anders. Die Funktion row_number() weist jeder Zeile abhängig von der order by-Klausel eine Zeilennummer zu. Die Startreihennummer ist 1; die row_number weist jeder Zeile bis zum Ende einen entsprechenden Wert zu.

Hier ist die Grundstruktur einer row_number()-Funktion:

WÄHLENKategorie, Farbe,
Zeilennummer()
OVER (Ordnung nach Kategorie) AS item_number
VON sahil.sample;

Aber was passiert, wenn Sie jedem Kategorieelement separate Zeilennummern zuweisen möchten? Die obige Syntax legt eine fortlaufende Seriennummer fest, unabhängig von den in der Kategorie gespeicherten Artikeln. Beispielsweise sollte die Kategorie der Geräte ihre exklusive Nummerierung haben, gefolgt von Ordnern und so weiter.

Du kannst den... benutzen Partition Funktion, um diese einfache, aber praktische Aufgabe auszuführen. Das Partitionsschlüsselwort weist jedem Kategorieelement bestimmte Zeilennummern zu.

WÄHLENKategorie, Farbe,
Zeilennummer()
OVER (Partition nach Kategorie, Reihenfolge nach Kategorie) AS item_number
VON sahil.sample;

Die Funktionen Rank() und Dense_Rank()

Der Rang() Funktion funktioniert anders als die Zeilennummer() Funktion. Sie müssen den Spaltennamen innerhalb der order by-Funktion angeben, um ihn als Grundlage für die Definition der Rangwerte zu verwenden. Im folgenden Codebeispiel können Sie beispielsweise die Farbspalte innerhalb der Order-by-Funktion verwenden. Die Abfrage verwendet dann diese Reihenfolge, um jeder Zeile einen Rangwert zuzuweisen.

Sie können die folgende Codesyntax verwenden, um eine Rangfunktion in SQL zu übergeben:

WÄHLENKategorie, Farbe,
Rang()
OVER (sortiert nach Farbe) AS item_rank
VON sahil.sample;

Sehen Sie sich die Ausgabe an, um zu verstehen, wie diese Funktion funktioniert.

Die Sortieren-nach-Funktion sortiert die Farbkategorie, während die Rangfunktion jeder Farbe einen Rang zuweist. Alle gleichen Farbwerte haben jedoch denselben Rang, während die verschiedenen Farben getrennte Ränge haben. Die Farbe Schwarz kommt innerhalb des Datensatzes dreimal vor; Anstatt einen Rangwert von 1, 2 und 3 zuzuweisen, erhalten die schwarzen Elemente den Rang 1.

Allerdings bekommt die nächste Farbe Braun den Rang 4 statt Rang 2. Die Rangfunktion überspringt Werte und weist den verschiedenen Einträgen den nächsten chronologischen Wert zu. Wenn Sie einen aussagekräftigeren Rangwert zuweisen möchten, können Sie die verwenden dichter_rank() Funktion.

Die dense_rank-Funktion überspringt keine Rangwerte während der order by-Funktion. Zum Beispiel haben die ersten drei farbigen Gegenstände (Schwarz) den Rang 1. Die folgende Farbe (Braun) hat jedoch keinen Rang 4, sondern einen Rang 2, was der folgenden chronologischen Nummer in der Nummerierungsliste entspricht. Die Funktion dense_rank ist eine praktischere Fensterfunktion, da sie der Liste der Elemente einen aussagekräftigen Wert zuweist.

So können Sie die Funktion dense_rank in SQL verwenden:

WÄHLENKategorie, Farbe,
dichter_rank()
OVER (sortiert nach Farbe) AS item_rank
VON sahil.sample;

Und hier ist ein Beispiel dafür, wie die Ausgabe dieser Funktion aussehen wird:

SQL-Funktionen zur Rettung

Die Fensterfunktionen von SQL sind ideal für die Durchführung fortgeschrittener analytischer Operationen. Sie können jedoch viele andere SQL-Befehle verwenden, um sicherzustellen, dass Ihre Rechenfähigkeiten erstklassig sind. Wenn Sie mehrere Ergebnisse auf einmal kombinieren und berechnen, gibt es nichts Besseres, als die Unterabfragen von SQL zu verwenden.

Unterabfragen sind ein hervorragendes Werkzeug, um erweiterte Funktionen auszuführen und die Qualität Ihrer Ergebnisse zu verbessern. Je nach Bedarf der Stunde können Sie Ihre Abfragen anpassen und effektiver an Ihre Anforderungen anpassen.