Baza wiedzy / 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 pracownikaprodukt- nazwa produktuwartosc_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.
