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:
| id | level |
| 1 | 5 |
| 2 | 6 |
| 3 | 6 |
| 4 | 7 |
| 5 | 7 |
| 6 | 5 |
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 table1Dies wird zurückgeben:
| id | row_num | row_rank | row_dense_rank |
| 1 | 1 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 2 | 3 | 3 | 2 |
| 3 | 4 | 3 | 2 |
| 4 | 5 | 5 | 3 |
| 5 | 6 | 5 | 3 |
Erklärung:
ROW_NUMBER(): Immer einzigartig: 1, 2, 3, 4, 5, 6RANK():- 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)
Aufgabe
EinfachVerfü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:
- Ein
regular_rank(mit Lücken) über die Summe der Medaillen - Ein
dense_rank(ohne Lücken) über die Summe der Medaillen
Ergebnis sortieren nach:
order by total_medals desc, region ascSpickzettel
SQL bietet drei Ranking-Funktionen, die sich bei gleichen Werten unterschiedlich verhalten:
ROW_NUMBER()- weist eindeutige sequenzielle Nummern zuRANK()- weist gleiche Ränge für gleiche Werte zu und überspringt nachfolgende RängeDENSE_RANK()- weist gleiche Ränge für gleiche Werte zu, ohne Ränge zu überspringen
Zum Beispiel:
| id | level |
| 1 | 5 |
| 2 | 6 |
| 3 | 6 |
| 4 | 7 |
| 5 | 7 |
| 6 | 5 |
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 table1Dies wird zurückgeben:
| id | row_num | row_rank | row_dense_rank |
| 1 | 1 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 2 | 3 | 3 | 2 |
| 3 | 4 | 3 | 2 |
| 4 | 5 | 5 | 3 |
| 5 | 6 | 5 | 3 |
Probier es selbst
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns9Multiple tables
Basic Join Part 1Basic Join Part 2Recap - JoinSelf joinRecap - Self JoinUnionSimplify queries, WITH keywordRecap - With QueriesRecap - Real Estate Contractor12Window Functions part 2
RANK & DENSE_RANK FunctionsRecap - RANK & DENSE_RANKNTILE FunctionAggregation FunctionsROWS & RANGE Criterion