MySQL-Zeilennummer-Fensterfunktion

Mysql Row Number Window Function



Innerhalb von MySQL enthält eine ROW NUMBER()-Methode eine chronologische Nummer für jede Zeile innerhalb der Partition. Es ist nur eine Art Fensterfunktion. Die Zeilenzahl beginnt bei 1 mit der Zeilenzahl innerhalb der Partition. Denken Sie daran, dass MySQL vor Version 8.0 die Funktion ROW NUMBER() nicht zulässt, jedoch eine Sitzungsvariable bietet, mit der Sie diese Funktion nachahmen können. Wir werden in diesem Handbuch mehr über die MySQL ROW NUMBER()-Funktionalität erfahren und eine fortlaufende Nummer für jede Zeile in der Ergebnissammlung erstellen. In MySQL werden die ROW_NUMBER()-Methoden mit einer der folgenden Klauseln verwendet:

  • Darin wird die Over()-Klausel verwendet.
  • Die ORDERS BY-Klausel ordnet das Ergebnis gemäß der Sortierreihenfolge der genannten Spalte an.

Syntax:

>> AUSWÄHLEN col_name,ZEILENNUMMER()ÜBER( TEILUNG VON spaltenname, SORTIEREN NACH col_name) WIE row_num VON Tabellenname;

Lassen Sie uns die MySQL-Befehlszeilen-Client-Shell aus den Anwendungen öffnen und das Passwort eingeben, um sich anzumelden.









Sie müssen eine neue Tabelle erstellen oder die Standardtabelle verwenden, um mit der Arbeit an der Zeilennummernfunktion zu beginnen. Wie in der folgenden Abbildung dargestellt, haben wir in den Schemadaten ein Tabellentier mit einigen Datensätzen. Lassen Sie uns seine Datensätze mit der SELECT-Anweisung abrufen.



>> AUSWÄHLEN * VON Daten .Tiere;





Beispiel 01: ROW_NUMBER() mit der ORDER BY-Klausel

Wir werden dieselbe Tabelle verwenden, um einige Beispiele für die Zeilennummernfunktion zu erläutern. Wir nehmen ein Beispiel für die Funktion ROW_NUMBER() gefolgt von Over(), wobei wir nur die ORDER BY-Klausel verwenden. Wir haben alle Datensätze abgerufen, während wir die Zeilen gemäß der Spalte Preisreihenfolge nummeriert haben. Wir haben einer Spalte den Namen row_num gegeben, die die Nummern der Zeile speichert. Versuchen wir dazu den folgenden Befehl.

>> AUSWÄHLEN *,ZEILENNUMMER()ÜBER( SORTIEREN NACH Preis) WIE row_num VON Daten .Tiere;

Beim Ausführen der obigen Abfrage können wir sehen, dass die Zeilen mit Nummern gemäß der Sortierreihenfolge der Spalte Preis belegt wurden. Sie könnten denken, dass einige kleinere Preise oben in der Spalte stehen sollten und danach sollte sie sortiert werden. Die ORDER BY-Klausel sieht jedoch nur die erste Ziffer oder das erste Alphabet der Spalte, um die Werte zu sortieren.



Führen wir dieselbe Abfrage gefolgt von der ORDER BY-Klausel aus, während wir die Sortierreihenfolge der Spalte Age verwenden. Die Ausgabe erfolgt entsprechend der Spalte Alter.

>> AUSWÄHLEN *,ZEILENNUMMER()ÜBER( SORTIEREN NACH Alter) WIE row_num VON Daten .Tiere;

Beispiel 02: ROW_NUMBER() Verwendung der PARTITION BY-Klausel

Wir werden die einzige PARTITION BY-Klausel in der ROW_NUMBER()-Abfrage verwenden, um die Ergebnisse zu überprüfen. Wir haben die SELECT-Abfrage verwendet, um die Datensätze abzurufen, gefolgt von der ROW_NUMBER()- und der OVER-Klausel, während die Tabelle gemäß der Spalte Color partitioniert wurde. Führen Sie den unten angehängten Befehl in der Befehlsshell aus.

>> AUSWÄHLEN *,ZEILENNUMMER()ÜBER( TEILUNG NACH Farbe) WIE row_num VON Daten .Tiere;

Im Ergebnis sehen Sie, dass die Nummerierung der Zeilen in Partitionen entsprechend der Sortierreihenfolge der Farben vergeben wurde. Da wir 4 Werte für die Farbe Schwarz haben, die 4 Zeilen benötigt. Deshalb hat es vierreihige Nummern von 1 bis 4 und umgekehrt.

Versuchen Sie es mit dem gleichen Beispiel, diesmal unterteilt nach der Spalte Geschlecht. Wie wir wissen, haben wir in dieser Tabelle nur zwei Geschlechter, deshalb werden 2 Partitionen gebildet. Weibchen besetzen 9 Reihen, deshalb hat es eine Reihennummerierung von 1 bis 9. Während Männchen 8 Werte haben, hat es deshalb 1 bis 8.

>> AUSWÄHLEN *,ZEILENNUMMER()ÜBER( TEILUNG NACH Geschlecht) WIE row_num VON Daten .Tiere;

Beispiel 03: ROW_NUMBER() Verwendung von PARTITION BY & ORDER BY

Wir haben die beiden obigen Beispiele in der MySQL-Befehlszeile gemacht, jetzt ist es an der Zeit, das ROW_NUMBER()-Beispiel in der MySQL Workbench 8.0 auszuführen. Öffnen Sie also die MySQL Workbench 8.0 aus den Anwendungen. Verbinden Sie die MySQL Workbench mit der lokalen Host-Root-Datenbank, um mit der Arbeit zu beginnen.

Auf der linken Seite der MySQL Workbench finden Sie die Schema-Leiste, blasen Sie den Navigator. In dieser Schemaleiste finden Sie die Liste der Datenbanken. Unter der Datenbankliste haben Sie verschiedene Tabellen und gespeicherte Prozeduren, wie Sie in der folgenden Abbildung sehen können. Wir haben verschiedene Tabellen in unserer Datenbank ‚data‘. Wir werden die Tabelle 'order1' mit dem SELECT-Befehl im Abfragebereich öffnen, um sie für die Implementierung der Funktion ROW_NUMBER() zu verwenden.

>> AUSWÄHLEN * VON Daten .bestellung1;

Die Tabellenreihenfolge1 wurde in der Rasteransicht wie unten gezeigt angezeigt. Sie können sehen, dass es 4 Spaltenfelder hat, ID, Region, Status und BestellNr. Wir werden alle Datensätze dieser Tabelle abrufen, während wir die Klauseln ORDER BY und PARTITION BY gleichzeitig verwenden.

Geben Sie im Abfragebereich von MySQL Workbench 8.0 die unten angezeigte Abfrage ein. Die Abfrage wurde mit der SELECT-Klausel gestartet und holt alle Datensätze, gefolgt von der Funktion ROW_NUMBER() zusammen mit der OVER-Klausel. Nach der OVER-Klausel haben wir die Spalte Status angegeben, gefolgt von der PARTITION BY-Anweisung, um die Tabelle entsprechend dieser Tabelle in Partitionen zu unterteilen. Die ORDER BY-Klausel wird verwendet, um die Tabelle absteigend nach der Spalte Region anzuordnen. Die Zeilennummern werden in der Spalte row_num gespeichert. Tippen Sie auf das Blitzsymbol, um diesen Befehl auszuführen.

Das unten angezeigte Ergebnis wird angezeigt. Zunächst wurde die Tabelle gemäß den Werten der Spalte Status in zwei Teile unterteilt. Danach wurde es in absteigender Reihenfolge der Spalte „Region“ dargestellt und den Partitionen wurden die Zeilennummern zugewiesen.

Abschluss:

Schließlich haben wir alle notwendigen Beispiele für die Verwendung der Funktion ROW_NUMBER() in MySQL Workbench und MySQL Command-line Client Shell fertiggestellt.