Jak działa DENSE_RANK w SQL?

Jak działa DENSE_RANK w SQL?

DENSE_RANK w SQL

DENSE_RANK to funkcja analityczna w SQL, która przypisuje rangi do wierszy w zestawie wyników, podobnie jak funkcja RANK. Różnica polega na tym, że DENSE_RANK nie tworzy luk w numeracji rang, gdy są wartości zduplikowane, co zapewnia ciągłość numeracji.

Składnia

Funkcja DENSE_RANK ma następującą składnię:

 
DENSE_RANK() OVER ([PARTITION BY partition_expression] ORDER BY sort_expression [ASC|DESC])

🧑‍💻 Gdzie:

  •  partition_expression – wyrażenie określające, na podstawie którego zostanie dokonany podział (partycjonowanie) wierszy. Jest to opcjonalne.
  •  sort_expression – wyrażenie określające kolejność sortowania wierszy.
  •  ASC|DESC – modyfikator określający kolejność sortowania: rosnąco (ASC) lub malejąco (DESC).

📌 Przykład:

Załóżmy, że mamy tabelę sprzedaz_pracownikow, w której przechowywane są informacje o sprzedaży produktów przez pracowników.

W tabeli znajdują się następujące kolumny:

  • id_pracownika – identyfikator pracownika
  • produkt – nazwa produktu
  • wartosc_sprzedazy – wartość sprzedaży

Chcemy przypisać rangi do pracowników na podstawie wartości sprzedaży produktów, przy czym rangi mają być przydzielane bez luk.

Zapytanie SQL będzie wyglądać następująco:


SELECT 
    id_pracownika, 
    produkt, 
    wartosc_sprzedazy, 
    DENSE_RANK() OVER (PARTITION BY produkt ORDER BY wartosc_sprzedazy DESC) as ranga
FROM 
    sprzedaz_pracownikow;

📌 Gdzie:

  • id_pracownika to identyfikator pracownika.
  • produkt to nazwa produktu.
  • wartosc_sprzedazy to wartość sprzedaży.
  • DENSE_RANK() OVER (PARTITION BY produkt ORDER BY wartosc_sprzedazy DESC) to funkcja rankingowa, która oblicza rangi w obrębie każdej grupy produktów (PARTITION BY produkt), sortując je według wartości sprzedaży w porządku malejącym (ORDER BY wartosc_sprzedazy DESC).

Program wyświetli tabelę z dodaną kolumną ranga, w której będą przypisane numery rang do wierszy w obrębie każdej grupy produktów.

KajoDataSpace