SQL RANK() und ROW_NUMBER(): detaillierte Erklärung der Unterschiede
In SQL haben RANK() und ROW_NUMBER() ähnliche Funktionen und können leicht verwechselt werden. Für eine effektive Datenmanipulation ist es jedoch entscheidend, ihre subtilen Unterschiede zu verstehen.
Vergleich von RANK() und ROW_NUMBER()
RANK() weist Zeilen und Spalten mit demselben Sortierwert innerhalb einer Partition den gleichen Rang zu, während ROW_NUMBER() immer inkrementiert, auch für Zeilen und Spalten mit demselben Wert.
Hauptunterschied: Umgang mit doppelten Werten
Der Hauptunterschied zwischen RANK() und ROW_NUMBER() ist ihr Verhalten, wenn innerhalb einer Partition auf doppelte Werte gestoßen wird:
Beispiel
Betrachten Sie das folgende Formular:
StyleID | ID | Description |
---|---|---|
1 | 1 | Item A |
1 | 1 | Item B |
1 | 1 | Item C |
1 | 2 | Item D |
Verwenden Sie die folgende Abfrage:
<code class="language-sql">SELECT ID, Description, RANK() OVER (PARTITION BY StyleID ORDER BY ID) AS 'Rank' FROM SubStyle; SELECT ID, Description, ROW_NUMBER() OVER (PARTITION BY StyleID ORDER BY ID) AS 'RowNumber' FROM SubStyle;</code>
Das gleiche Ergebnis kann nur erzielt werden, wenn innerhalb der Partition keine doppelten Werte vorhanden sind. Wenn Sie beispielsweise eine weitere Zeile mit StyleID 3 und ID 1 hinzufügen, werden Sie Folgendes beobachten:
StyleID | ID | Description | Rank | RowNumber |
---|---|---|---|---|
1 | 1 | Item A | 1 | 1 |
1 | 1 | Item B | 1 | 2 |
1 | 1 | Item C | 1 | 3 |
1 | 2 | Item D | 4 | 4 |
3 | 1 | New Item | 1 | 5 |
Wie Sie sehen können, weist ROW_NUMBER() einem eindeutigen Wert mit der StyleID 3 eine steigende Zahl zu, während RANK() ihm den gleichen Rang zuweist wie einer Zeile mit einem doppelten Wert der StyleID von 1.
Fazit
RANK() und ROW_NUMBER() dienen unterschiedlichen Zwecken. RANK() wird verwendet, um eindeutige Werte innerhalb einer Gruppe einzuordnen und doppelte Werte entsprechend zu behandeln. ROW_NUMBER() hingegen erhöht sich immer und stellt so sicher, dass jede Zeile einen eindeutigen numerischen Wert hat, auch für Zeilen mit doppelten Werten. Das Verständnis dieser Unterschiede ist entscheidend, um fundierte Entscheidungen bei der Arbeit mit SQL-Daten treffen zu können.
Das obige ist der detaillierte Inhalt vonSQL RANK() vs. ROW_NUMBER(): Wie unterscheiden sie sich beim Umgang mit Bindungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!