Heim > Datenbank > MySQL-Tutorial > SQL RANK() vs. ROW_NUMBER(): Was ist der Unterschied?

SQL RANK() vs. ROW_NUMBER(): Was ist der Unterschied?

Mary-Kate Olsen
Freigeben: 2025-01-13 16:52:44
Original
598 Leute haben es durchsucht

SQL RANK() vs. ROW_NUMBER(): What's the Difference?

Unterschiede zwischen SQL RANK() und ROW_NUMBER()

Bei der Verwendung von SQL-Ranking-Funktionen ist es wichtig, den Unterschied zwischen RANK() und ROW_NUMBER() zu verstehen. Obwohl sie in manchen Fällen ähnlich aussehen, können sie sich beim Umgang mit doppelten Werten unterschiedlich verhalten.

Vergleich von ROW_NUMBER() und RANK()

ROW_NUMBER() weist jeder Zeile einen fortlaufenden ganzzahligen Wert zu, unabhängig davon, ob die Werte in der Sortierspalte gleich sind. Das bedeutet, dass ROW_NUMBER() jeder Zeile immer eine eindeutige Ganzzahl zuweist.

RANK() hingegen weist jeder Zeile einen Rang zu, basierend auf der Sortierreihenfolge der Zeile innerhalb der Partition. Zeilen mit demselben Sortierwert erhalten denselben Rang. Bei einem Gleichstand entstehen Lücken in der Rangliste.

Demo

Die folgende SQL-Abfrage zeigt den Unterschied zwischen ROW_NUMBER() und RANK():

<code class="language-sql">SELECT ID, [Description], RANK() OVER(PARTITION BY StyleID ORDER BY ID) as 'Rank' FROM SubStyle</code>
Nach dem Login kopieren
<code class="language-sql">SELECT ID, [Description], ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) as 'RowNumber' FROM SubStyle</code>
Nach dem Login kopieren

Mit diesen Abfragen sehen beide Ergebnismengen zunächst identisch aus. Gibt es jedoch einen Gleichstand in der Rangliste, wird der Unterschied deutlich. Betrachten Sie die folgenden Beispieldaten:

<code class="language-sql">WITH T(StyleID, ID)
AS (SELECT 1,1 UNION ALL
    SELECT 1,1 UNION ALL
    SELECT 1,1 UNION ALL
    SELECT 1,2)
SELECT *,
RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS [RANK],
ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) AS [ROW_NUMBER],
DENSE_RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS [DENSE_RANK]
FROM T</code>
Nach dem Login kopieren

Ergebnis:

<code>StyleID     ID       RANK      ROW_NUMBER      DENSE_RANK
----------- -------- --------- --------------- ----------
1           1        1         1               1
1           1        1         2               1
1           1        1         3               1
1           2        4         4               2</code>
Nach dem Login kopieren

In diesem Beispiel erhöht sich ROW_NUMBER() auch bei Gleichstand, während RANK() allen gebundenen Zeilen den gleichen Rang zuweist. DENSE_RANK() ist wie RANK(), weist jedoch den nächstverschiedenen Rang (2) dem nächstverschiedenen Rangwert zu.

Das obige ist der detaillierte Inhalt vonSQL RANK() vs. ROW_NUMBER(): Was ist der Unterschied?. 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