Lekcje modułu (3/4)
Rankingi: ROW_NUMBER, RANK i DENSE_RANK
Rankingi: ROW_NUMBER, RANK i DENSE_RANK
Oprócz agregowania funkcje okna wyróżniają się także porządkowaniem i rankingiem. Istnieją funkcje zaprojektowane specjalnie do pracy w oknach (kod OVER() staje się obowiązkowy), które przypisują kolejne numery lub pozycje rankingowe.
Aby działały wbrew kryterium, musimy użyć klauzuli ORDER BY wewnątrz OVER().
Trio rankingowe
ROW_NUMBER(): Przypisuje zwykły numer kolejny (1, 2, 3...) do każdego wiersza, arbitralnie zrywając remisy.- KODEPH1: Tworzy efekt „Olimpiady”: 1, 2, 2, 4. Pozostawia lukę (pomija się „3”) i przypisuje tę samą rangę w przypadku remisu.
- KODEPH2: Zagęszcza szeregi: 1, 2, 2, 3. Po remisie nigdy nie ma przerwy.
SELECT
product_name,
price,
RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;Łącząc PARTITION BY i ORDER BY razem w OVER(), możemy uzyskać „pierwszą trójkę w każdej kategorii”!
Wyodrębnij „imię”, „nazwisko” i „id” z tabeli klientów („klienci”) (załóż, że „id” to numer identyfikacyjny). Dodaj kolumnę „ranking” za pomocą DENSE_RANK() w oparciu o „id” malejąco (od najwyższego do najniższego).
Pokaż wskazówkę
DENSE_RANK() OVER(ZAMÓWIENIE WEDŁUG id DESC).
Rozwiązanie dostępne po 3 próbach
Zbuduj ranking dla każdego „category_id” w oparciu o cenę produktów („produkty”). Wyodrębnij „id kategorii”, „id”, „cena” i dodaj „ranking ceny” za pomocą ROW_NUMBER() w malejącej kolejności „cena”, dzieląc według „id kategorii”.
Pokaż wskazówkę
Połącz PARTYCJĘ WG kategorii_id ZAMÓW WG ceny DESC wewnątrz OVER.
Rozwiązanie dostępne po 3 próbach