Przejdź do głównej treści
eLearner.app
Moduł 13 · Lekcja 3 z 451/57 w kursie~15 min
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

  1. ROW_NUMBER(): Przypisuje zwykły numer kolejny (1, 2, 3...) do każdego wiersza, arbitralnie zrywając remisy.
  2. KODEPH1: Tworzy efekt „Olimpiady”: 1, 2, 2, 4. Pozostawia lukę (pomija się „3”) i przypisuje tę samą rangę w przypadku remisu.
  3. KODEPH2: Zagęszcza szeregi: 1, 2, 2, 3. Po remisie nigdy nie ma przerwy.
SQL
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”!

Ćwiczenie#sql.m13.l3.e1
Próby: 0Ładowanie...

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).

Ładowanie edytora...
Pokaż wskazówkę

DENSE_RANK() OVER(ZAMÓWIENIE WEDŁUG id DESC).

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#sql.m13.l3.e2
Próby: 0Ładowanie...

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”.

Ładowanie edytora...
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