Simulieren Sie die Funktion ROW_NUMBER() in MySQL
Die Funktion ROW_NUMBER() von SQL Server kann Zeilen innerhalb einer bestimmten Partition fortlaufende Nummern zuweisen. Obwohl MySQL keine exakt äquivalente Funktion hat, gibt es Möglichkeiten, eine ähnliche Funktionalität zu erreichen.
Verwenden Sie Variablen, um die Zeilennummerierung zu implementieren
In MySQL-Versionen vor 8.0 können Variablen verwendet werden, um die Zeilennummer innerhalb einer Partition zu erhöhen. Die folgende Abfrage veranschaulicht diesen Ansatz:
<code class="language-sql">SELECT t.*, @rownum := @rownum + 1 AS rank FROM YOUR_TABLE t, (SELECT @rownum := 0) r</code>
Diese Abfrage weist jeder Zeile eine fortlaufende Nummer zu und die Variable @rownum wird in jeder Zeile erhöht.
Verwaltung mehrerer Partitionen
Wenn die Partition mehrere Spalten enthält, können Sie mehrere Variablen erstellen und diese auf 0 setzen, wenn sich der Wert einer der Partitionsspalten ändert. Partitionieren Sie beispielsweise nach Spalte 1 und Spalte 2:
<code class="language-sql">SELECT t.*, @rownum_col1 := IF(@col1 = t.col1, @rownum_col1 + 1, 1) AS rank_col1, @rownum_col2 := IF(@col2 = t.col2, @rownum_col2 + 1, 1) AS rank_col2, @col1 := t.col1, @col2 := t.col2 FROM YOUR_TABLE t, (SELECT @rownum_col1 := 0, @rownum_col2 := 0, @col1 := '', @col2 := '') r ORDER BY t.col1, t.col2;</code>
Hinweis: MySQL 8.0 und spätere Versionen verfügen über native Unterstützung für die Funktion ROW_NUMBER() und bieten so eine direktere Möglichkeit, die Zeilennummerierung zu implementieren. Der obige Code wurde korrigiert, um den Fall mehrerer Partitionen korrekt zu behandeln und sicherzustellen, dass der Zeilennummernzähler zurückgesetzt wird, wenn sich die Partition ändert. Die ORDER BY
-Klausel wurde hinzugefügt, um konsistente Ergebnisse sicherzustellen, da die Reihenfolge der Variablenzuweisungen von der Reihenfolge des Datenlesens abhängt. IF
-Anweisungen wurden ebenfalls angepasst, um die Logik klarer auszudrücken.
Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL Row_Number () -Funktionalität erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!