Menu
Coddy logo textTech

RANK & DENSE_RANK Functions

Teil des Abschnitts Grundlagen der SQL-Journey von Coddy — Lektion 65 von 72.

ROW_NUMBER() ist eine Art von Ranking-Funktion, und es gibt zwei weitere: RANK() und DENSE_RANK().

Die RANK()-Funktion nummeriert Zeilen wie ROW_NUMBER(), gibt aber identische Nummern für gleiche Zeilen und überspringt Nummern. DENSE_RANK() ist ähnlich wie RANK(), überspringt aber keine Nummern.

Zum Beispiel:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

Dies wird zurückgeben:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Erklärung:

  • ROW_NUMBER(): Immer einzigartig: 1, 2, 3, 4, 5, 6
  • RANK():
    • Ebene 5 (2 Zeilen): beide erhalten Rang 1
    • Ebene 6 (2 Zeilen): beide erhalten Rang 3 (überspringt 2)
    • Ebene 7 (2 Zeilen): beide erhalten Rang 5 (überspringt 4)
  • DENSE_RANK():
    • Ebene 5 (2 Zeilen): beide erhalten Rang 1
    • Ebene 6 (2 Zeilen): beide erhalten Rang 2 (kein Überspringen)
    • Ebene 7 (2 Zeilen): beide erhalten Rang 3 (kein Überspringen)
challenge icon

Aufgabe

Einfach

Verfügbare Tabellen und Spalten:

  • <strong>medals</strong>: <strong>region</strong>, <strong>medal_color</strong>, <strong>medal_count</strong>

Erstellen Sie eine Abfrage, die die Region, die Gesamtmedaillenzahl (Summe aller Medaillen unabhängig von der Farbe) und zwei Arten von Ranglisten anzeigt:

  1. Ein regular_rank (mit Lücken) über die Summe der Medaillen
  2. Ein dense_rank (ohne Lücken) über die Summe der Medaillen

Ergebnis sortieren nach:

order by total_medals desc, region asc

Spickzettel

SQL bietet drei Ranking-Funktionen, die sich bei gleichen Werten unterschiedlich verhalten:

  • ROW_NUMBER() - weist eindeutige sequenzielle Nummern zu
  • RANK() - weist gleiche Ränge für gleiche Werte zu und überspringt nachfolgende Ränge
  • DENSE_RANK() - weist gleiche Ränge für gleiche Werte zu, ohne Ränge zu überspringen

Zum Beispiel:

idlevel
15
26
36
47
57
65
SELECT id, 
	ROW_NUMBER() OVER (ORDER BY level) as row_num,
	RANK() OVER (ORDER BY level) as row_rank,
	DENSE_RANK() OVER (ORDER BY level) as row_dense_rank
FROM table1

Dies wird zurückgeben:

idrow_numrow_rankrow_dense_rank
1111
6211
2332
3432
4553
5653

Probier es selbst

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen