Salt la conținutul principal
Modulul 13 · Lecția 3 din 451/57 în curs~15 min
Lecții din modul (3/4)

Clasamente: ROW_NUMBER, RANK și DENSE_RANK

Clasamente: ROW_NUMBER, RANK și DENSE_RANK

Dincolo de agregare, funcțiile ferestrei strălucesc la ordine și clasare. Există funcții concepute special pentru a funcționa în interiorul ferestrelor (OVER() devine obligatorie) care atribuie numere secvențiale sau poziții de clasare.

Pentru a le face să funcționeze pe baza unui criteriu, trebuie să folosim clauza ORDER BY în interiorul OVER().

Trio-ul de clasament

  1. ROW_NUMBER(): atribuie un număr secvenţial simplu (1, 2, 3...) fiecărui rând, rupând legăturile în mod arbitrar.
  2. RANK(): Produce efectul „Olimpic”: 1, 2, 2, 4. Lasă un gol („3” este omis) și atribuie același rang în caz de egalitate.
  3. DENSE_RANK(): Densifică rangurile: 1, 2, 2, 3. Nu există niciodată un decalaj după o egalitate.
SQL
SELECT
  product_name,
  price,
  RANK() OVER(ORDER BY price DESC) AS price_rank
FROM products;

Combinând PARTITION BY și ORDER BY împreună în interiorul OVER() putem obține „primii 3 pentru fiecare categorie”!

Exercițiu#sql.m13.l3.e1
Încercări: 0Se încarcă…

Extrageți „first_name”, „last_name” și „id” din tabelul clienți („clienți”) (presupunem că „id” este numărul de identificare). Adăugați o coloană „clasament” folosind DENSE_RANK() pe baza „id” descendent (de la cel mai mare la cel mai mic).

Se încarcă editorul...
Afișează indiciu

DENSE_RANK() OVER(ORDER BY id DESC).

Soluție disponibilă după 3 încercări

Exercițiu#sql.m13.l3.e2
Încercări: 0Se încarcă…

Creați un clasament pentru fiecare „category_id” pe baza prețului produselor („produs”). Extrageți „category_id”, „id”, „price” și adăugați „price_rank” folosind ROW_NUMBER() în ordine descrescătoare „price”, partiționând după „category_id”.

Se încarcă editorul...
Afișează indiciu

Combinați PARTITION BY categorie_id ORDER BY preț DESC în interiorul OVER.

Soluție disponibilă după 3 încercări