Heim > Datenbank > MySQL-Tutorial > SQL RANK() vs. ROW_NUMBER(): Wie unterscheiden sie sich beim Umgang mit Bindungen?

SQL RANK() vs. ROW_NUMBER(): Wie unterscheiden sie sich beim Umgang mit Bindungen?

Susan Sarandon
Freigeben: 2025-01-13 16:56:43
Original
895 Leute haben es durchsucht

SQL RANK() vs. ROW_NUMBER(): How Do They Differ When Handling Ties?

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:

  • RANK(): Weist Zeilen mit doppelten Werten denselben Rang zu.
  • ROW_NUMBER(): Weisen Sie Zeilen mit doppelten Werten willkürlich aufsteigende Ränge zu.

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage