PostgreSQL LAG -Funktion () wird verwendet, um auf die Zeile in der Tabelle zuzugreifen, die vor der aktuellen Zeile der Tabelle vorhanden ist. Wie der Name angibt, dass er hinter der aktuellen Zeile zurückbleibt und den Datensatz aufnimmt. In PostgreSQL ist die LAG -Funktion wichtig, damit sie die vorherigen Zeilen mit der aktuellen Zeile vergleicht.
Diese Funktion ist geeignet, um über die zuvor eingegebenen Daten zu wissen, die jedoch in der aktuellen Zeile vorhanden sind. Dann können Sie auf die Daten der Vergangenheit zugreifen. Öffnen Sie PSQL und nach der Bereitstellung eines Kennworts können Sie jetzt alle Befehle auf der PSQL -Shell anwenden.
Syntax
Verzögerung (Expression [Offset [Wert]])Ein Offset ist eine Ganzzahl -Nummer in der Abfrage und zeigt die Anzahl der über der aktuellen Zeile vorhandenen Zeilen an. Es kann eine Unterabfrage oder ein Ausdruck sein.
Die Verzögerungsfunktion wird auf die Wertpartition angewendet, die hauptsächlich durch eine Partitionsklausel erstellt wird. Gleichzeitig wird die Bestellung nach Klausel verwendet, um die Zeilen in einer bestimmten Reihenfolge zu ordnen.
Es gibt zwei Hauptmerkmale der Lag -Funktion, die wir hier beschrieben haben, sind:
Verzögerung Standard -Partition
Wir haben einen Tisch mit dem Namen "Showroom" mit den Details der Fahrzeuge. Die Tabelle wird durch die Abfrage "Tabelle erstellen" in PSQL erstellt und durch Hinzufügen der Daten mithilfe einer Anweisung "Einfügen".
>> aus dem Showroom auswählen;Wir werden die Lag -Funktion auf der Tabelle anwenden. Die LAG -Funktion enthält zwei oder mehr "Auswählen" Anweisungen darin. Da wir den Wert vor der aktuellen Zeile auswählen müssen, wird die aktuelle Zeile im ersten Schritt und dann in der Zeile vorher ausgewählt.
Beispiel 1
In diesem Beispiel werden wir aus der Tabelle eine Spalte auswählen und die Summe aus der Preisspalte berechnen. In der zweiten Auswahlanweisung wird die LAG -Funktion verwendet. Beide Aussagen verwenden die Klausel "Order by" mit "Gruppe by" in der Gesamtfunktion von Select. Da kein Jahr dem anderen ähnlich ist, werden alle Zeilen angezeigt. Es wird keine Gruppierung geben. Jetzt wenden wir den Befehl auf der Tabelle an:
>> mit CTE as (ausgewählter Jahr, Summe (Preis) Preis von Showroom Group By Year Bestellung nach Jahr) Ausgewählte Jahr, Preis, Verzögerung (Preis, 1) Über (Bestellung nach Jahr) Pothor_year_discount von CTE;Um den Wert der Zeile über der aktuellen Zeile zu drucken. Der erhaltene Wert wird in "CTE" zur weiteren Verwendung in der letzteren Abfrage gespeichert. Der resultierende Wert wird von der Spalte „Jahr“ bestellt und nach der Spalte "Jahr" gruppiert.
Wenn Sie sich in Richtung der zweiten Auswahlanweisung bewegen, werden dieselben Spalten in „CTE“ aus der Tabelle ausgewählt. Eine zusätzliche Spalte wird mit dem Namen "Poth. Und die Zeilen der resultierenden Spalte müssen nach der Jahresspalte angeordnet sein.
Sie können aus der erhaltenen Tabelle sehen, dass die erste Zeile in der neuen Spalte ausgeblendet ist. Weil der Preis von Anfang an in die nächste Reihe verschoben wird, um die erste Reihe zu machen.
Beispiel 2
Es gibt ein anderes Beispiel; Hier verwenden wir drei ausgewählte Aussagen. "CTE" und "Cye" werden verwendet, um die Werte zu speichern, die aus den beiden Abfragen mit der Anweisung "SELECT" erhalten werden, und deren resultierende Werte werden in der dritten Auswahlanweisung verwendet. Die Ausgabe von „CTE“ fungiert als Ausgabe für „CTE2“. In ähnlicher Weise ist „CTE2“ die Eingabe für die dritte Auswahlanweisung. Alle Werte werden in der resultierenden Tabelle kombiniert angezeigt, da ein Ergebnis eine LAG -Funktion ist, während die zweite resultierende Spalte die Differenz zwischen den beiden Verzögerungswerten zeigt.
Das Bewegen in Richtung des ersten „CTE“ berechnet die gleiche Funktion wie das vorherige Beispiel. Die Summe wird aus der Spalte "Preis" berechnet.
>> mit CTE as (ausgewählter Jahr, Summe (Preis) Preis von der Showroom Group By Year Order By Jahr),Das zweite „CTE2“ ähnelt dem Befehl zweiter Auswahl, da wir wissen, dass die Verzögerungsfunktion auf der Summe der Spalte „Preis“ angewendet wird. Die Spalte dieser Summe "PROBOR_YEAR_DISCOUNT" ist wie in CTE gespeichert.
>> cte2 as (ausgewählte Jahr, Preis, Verzögerung (Preis, 1) Über (Bestellung nach Jahr) Vorheriger_year_discount von CTE)Die dritte Auswahlanweisung nimmt die verzögerte Preisesumme an und berechnet deren Differenz. Zum Beispiel subtrahiert der Preis in der dritten Zeile den Wert in der zweiten Reihe. Gleichzeitig ist die erste Zeile aufgrund der Verzögerungsfunktion null.
>> Jahr, Preis, Price, Voreingenommener_year_discount, (Vorherd_year_discount - Preis) Differenz von CTE;Die 4. Spalte wird als Differenz bezeichnet, da der Minus -Operator die Werte in der 3. Spalte subtrahiert.
Für jede Zeile wird der Wert aus der 3. Spalte aus der vorherigen Zeile abgezogen. Zum Beispiel (3. -2nd), (4. -3rd) und so weiter. Und der subtrahierte Wert ist vor dem ersten Wert geschrieben (vom nächsten Wert abgezogen). In der 6., die letzte Zeile in der Spalte „Differenz“, wird die Antwort geschrieben, die durch Subtrahieren der 1. Zeile aus der 2. Zeile, dem Wert des Jahres 2021, erhalten wird.
Beispiel 3
Betrachten Sie ein anderes Beispiel, in dem das gleiche Konzept auf die Tabelle angewendet wird. Aber die Verzögerung beträgt 2 anstelle eines. Eine einzelne Auswahlanweisung zeigt die Preise an, nicht die Summe oder eine andere Gesamtfunktion.
>> Jahr, Preis, Verzögerung (Preis, 2) über (Bestellung nach Jahr) Rabatt aus dem Ausstellungsraum;Der resultierende Wert zeigt, dass der Preis in der Rabattspalte zwei Zeilen nach unten verschoben wird. Dies bedeutet, dass wir vor der aktuellen Zeile der Tabelle auf die Zeilen zugegriffen haben.
Verzögerungsfunktion in den Partitionen
Via pgadmin
In Pgadmin können Sie nach der Bereitstellung des Kennworts jetzt auf die Datenbank und alle darin enthaltenen Inhalte zugreifen. Gehen Sie zum Query -Tool der Tabellen. Erstellen Sie nun neue Tabellennamen "Team_Members".
>> creat table team_members (Name varchar (100), ID int, Jahr Integer, Gehalt Integer);Fügen Sie nach dem Erstellen der Tabelle nun der Tabelle Werte hinzu.
>> In Team_Members (Name, ID, Jahr, Gehalt) Werte einfügen ('Salar', 1, 2018, 180000);Nachdem die Werte eingefügt wurden, wenden Sie nun die Abfrage an.
Die LAG () -Funktion in diesem Typ vergleicht ein Jahr Gehalt mit dem letzten Jahr jeder Gruppe.
>> Jahr, Gehalt, ID, Verzögerung (Gehalt, 1) über die Partition nach ID (Bestellung nach Jahr) Rabatt von team_mitmbers;In diesem Beispiel werden die IDs gemeinsam gruppiert. Die Partition verteilen die Zeilen in die Gruppe, da Sie sehen können, dass alle dieselben IDs zusammen vorhanden sind. Und die Rabattspalte zeigt den Vergleich des Einreihengehalts mit der zweiten Reihe mit der Verzögerung von 1.
Abschluss
"LAG -Funktion" wird verwendet, um den von Ihnen eingegebenen Datensatz vor der aktuellen Zeile abzurufen, die Sie ausgewählt haben. Zwei Hauptkategorien von Verzögerungsfunktionen werden hier mit Beispielen erörtert. SELECT, Bestellung werden zusätzlich mit der „Partition nach Klausel“ verwendet. Diese Funktion in PostgreSQL kann innerhalb der Tabelle angewendet werden und dann unterschiedliche Vorgänge anwenden.