Die SQL OVER () -Klausel – wann und warum ist sie nützlich?

Mit einfachen Worten: Die Over-Klausel kann verwendet werden, um nicht aggregierte Werte zusammen mit aggregierten Werten auszuwählen.

Partition BY, ORDER BY inside und ROWS oder RANGE sind Teil der Klausel OVER () by.

partition by wird verwendet, um Daten zu partitionieren und dann diese Fenster, aggregierten Funktionen und falls nicht, auszuführen Partition durch die dann gesamte Ergebnismenge haben wird als eine einzelne Partition betrachtet.

Sehen wir uns die grundlegende Syntax der OVER-Klausel an.

PARTITION BY: Dient zum Partitionieren von Daten und zum Ausführen von Vorgängen für Gruppen mit denselben Daten.

ORDER BY: Dient zum Definieren der logischen Reihenfolge von Daten in Partitionen. Wenn keine Partition angegeben wird, wird die gesamte Ergebnismenge als einzelne Partition betrachtet.

: Hiermit kann angegeben werden, welche Zeilen bei der Ausführung der Operation in einer Partition berücksichtigt werden sollen.

Nehmen wir ein Beispiel:

Hier ist mein Datensatz:

Lassen Sie mich also verschiedene Szenarien ausführen und sehen, wie sich Daten auswirken, und ich werde von schwieriger Syntax zu einfacher one

Beobachten Sie einfach den sum_sal-Teil. Hier verwende ich die Reihenfolge nach Gehalt und „BEREICH ZWISCHEN UNBEGRENZTEM VORAUSGANG UND AKTUELLER REIHE“. In diesem Fall verwenden wir keine Partition, sodass ganze Daten als eine behandelt werden Partition und wir bestellen nach Gehalt. Und das Wichtigste hier ist UNBOUNDED PRECEDING AND CURRENT ROW. Dies bedeutet, wenn wir die Summe von der Startzeile bis zur aktuellen Zeile für jede Zeile berechnen. Aber wenn wir Zeilen mit Gehalt 5000 und Namen sehen = „Pavan“, idealerweise sollte es 17000 sein und für Gehalt = 5000 und Name = Mark sollte es 22000 sein. Aber da wir RANGE verwenden und in diesem Fall, wenn es s findet Imilar-Elemente betrachten sie dann als dieselbe logische Gruppe, führen eine Operation für sie aus und weisen jedem Element in dieser Gruppe einen Wert zu. Das ist der Grund, warum wir den gleichen Wert für Gehalt = 5000 haben. Die Engine stieg auf Gehalt = 5000 und Name = Ron und berechnete die Summe und ordnete sie dann allen Gehältern = 5000 zu Wenn Sie sie zusammenfassen, wird die SUMME von der Startzeile zur aktuellen Zeile berechnet und Elemente mit demselben Wert werden nicht anders behandelt als BEREICH

Diese Ergebnisse sind dieselben wie

Das liegt daran, dass Over (Reihenfolge nach Gehalt) nur eine Abkürzung von Over ist (Reihenfolge nach Gehalt BEREICH ZWISCHEN UNBEGRENZTEM VORANGEGANGENEM UND AKTUELLEM REIHE). Wo immer wir also einfach die Reihenfolge ohne ROWS oder RANGE angeben, wird es verwendet BEREICH ZWISCHEN UNBEGRENZTEM VORANGEGANGENEM UND AKTUELLEM REIHE als Standard.

Hinweis: Dies gilt nur für Funktionen, die tatsächlich BEREICH / REIHE akzeptieren. Beispielsweise akzeptieren ROW_NUMBER und einige andere RANGE / REIHE nicht und in diesem Fall nicht Dies kommt nicht ins Bild.

Bis jetzt haben wir gesehen, dass die Over-Klausel mit einer Bestellung von Range / ROWS verwendet und die Syntax irgendwie aussieht Scharnier wie dieser BEREICH ZWISCHEN UNBEGRENZTER VORANGEGANGENER UND AKTUELLER REIHE Und es wird tatsächlich bis zur aktuellen Zeile aus der ersten Zeile berechnet. Aber was ist, wenn es Werte für die gesamte Datenpartition berechnen und für jede Spalte haben möchte (dh von der ersten bis zur letzten Zeile)? Hier ist die Abfrage für diese

Anstelle von CURRENT ROW gebe ich UNBOUNDED FOLLOWING an, das die Engine anweist, bis zum letzten Partitionsdatensatz für jede Zeile zu berechnen.

Kommen wir nun zu Ihrer Zeigen Sie auf was ist OVER () mit leeren Klammern?

Es ist nur eine Abkürzung für Over (Reihenfolge nach Gehalt REIHEN ZWISCHEN UNBEGRENZTEM VORANGEGANGENEM UND UNBEGRENZTEM FOLGENDEM)

Hier spezifizieren wir indirekt Um alle meine Ergebnismengen als eine einzelne Partition zu behandeln und dann Berechnungen vom ersten bis zum letzten Datensatz jeder Partition durchzuführen.

Ich habe ein Video dazu erstellt, und wenn Sie interessiert sind, können Sie es besuchen. https://www.youtube.com/watch?v=CvVenuVUqto&t=1177s

Danke, Pavan Kumar AryasomayajuluHTTP: //xyzcoder.github.io

Write a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.