Lektionen des Moduls (3/4)
Rankings: ROW_NUMBER, RANK und DENSE_RANK
Rankings: ROW_NUMBER, RANK und DENSE_RANK
Über die Aggregation hinaus glänzen Fensterfunktionen bei der Reihenfolge und Rangfolge. Es gibt Funktionen, die speziell für die Arbeit innerhalb von Fenstern entwickelt wurden (OVER() wird obligatorisch), die fortlaufende Nummern oder Rangfolgepositionen zuweisen.
Damit sie gegen ein Kriterium arbeiten, müssen wir die ORDER BY-Klausel in OVER() verwenden.
Das Ranking-Trio
ROW_NUMBER(): Weist jeder Zeile eine einfache fortlaufende Nummer (1, 2, 3...) zu und bricht Verbindungen willkürlich auf.RANK(): Erzeugt den „Olympia“-Effekt: 1, 2, 2, 4. Es bleibt eine Lücke (die „3“ wird übersprungen) und weist bei Gleichstand den gleichen Rang zu.DENSE_RANK(): Verdichtet die Ränge: 1, 2, 2, 3. Nach einem Unentschieden entsteht nie eine Lücke.
SELECT
product_name,
price,
RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;Durch die Kombination von PARTITION BY und ORDER BY in OVER() können wir „die Top 3 für jede Kategorie“ erhalten!
Extrahieren Sie „Vorname“, „Nachname“ und „ID“ aus der Kundentabelle („Kunden“) (angenommen, „ID“ ist die Identifikationsnummer). Fügen Sie mit DENSE_RANK() eine „Rang“-Spalte hinzu, basierend auf der „id“ absteigend (vom höchsten zum niedrigsten).
Hinweis anzeigen
DENSE_RANK() OVER(ORDER BY id DESC).
Lösung nach 3 Versuchen verfügbar
Erstellen Sie für jede „category_id“ ein Ranking basierend auf dem Preis der Produkte („products“). Extrahieren Sie „category_id“, „id“, „price“ und fügen Sie „price_rank“ mit ROW_NUMBER() in absteigender „price“-Reihenfolge und Partitionierung nach „category_id“ hinzu.
Hinweis anzeigen
Kombinieren Sie PARTITION BY Category_id ORDER BY Price DESC innerhalb des OVER.
Lösung nach 3 Versuchen verfügbar