
Funkcja RANK()
w języku SQL to jedno z najbardziej przydatnych narzędzi, które pomaga w porządkowaniu wyników zapytań według określonej kolejności. Jeśli kiedykolwiek zastanawiałeś się, jak przypisać rangę każdemu rekordowi w tabeli, to właśnie RANK()
jest tym, czego potrzebujesz. W tym artykule wyjaśnię, jak działa ta funkcja, pokażę konkretne przykłady i omówię różnice względem pokrewnych funkcji.
Co to jest funkcja RANK() w SQL?
Funkcja RANK()
w SQL służy do nadawania rang poszczególnym wynikom zapytania na podstawie określonego kryterium sortowania. Rangi przypisywane są w kolejności rosnącej i w przypadku powtórzenia wartości, kolejne rangi są pomijane.
Funkcję tę zalicza się do tzw. funkcji okna (window functions). Działa w obrębie podzbiorów danych, które są definiowane za pomocą klauzuli PARTITION BY
.
Składnia funkcji RANK()
Podstawowa składnia funkcji RANK()
wygląda następująco:
RANK() OVER (PARTITION BY kolumna_partycjonująca ORDER BY kolumna_sortująca ASC|DESC)
Główne elementy zapytania:
OVER()
– określa zakres działania funkcji (partycjonowanie i sortowanie).PARTITION BY
– opcjonalny podział zbioru danych na grupy (jeśli nie występuje, ranking liczony jest dla całego zapytania).ORDER BY
– określa porządek sortowania, według którego przyznawana jest ranga.
Prosty przykład użycia funkcji RANK()
Załóżmy, że mamy tabelę Pracownicy
zawierającą dane o pracownikach i ich wynagrodzeniach:
ID | Imię | Stanowisko | Wynagrodzenie |
---|---|---|---|
1 | Anna | Manager | 12000 |
2 | Jan | Inżynier | 10000 |
3 | Magda | Inżynier | 10000 |
4 | Marek | Technik | 8000 |
Teraz chcemy nadać rangę pracownikom na podstawie ich wynagrodzenia, od najwyższego do najniższego. Wykorzystamy funkcję RANK()
:
SELECT ID, Imię, Stanowisko, Wynagrodzenie,
RANK() OVER (ORDER BY Wynagrodzenie DESC) AS Ranga
FROM Pracownicy;
Wyniki będą wyglądać następująco:
ID | Imię | Stanowisko | Wynagrodzenie | Ranga |
---|---|---|---|---|
1 | Anna | Manager | 12000 | 1 |
2 | Jan | Inżynier | 10000 | 2 |
3 | Magda | Inżynier | 10000 | 2 |
4 | Marek | Technik | 8000 | 4 |
Widać tutaj, że Jan i Magda mają tę samą rangę (ponieważ mają to samo wynagrodzenie 10000), a kolejny rekord (Marek) otrzymuje rangę 4, a nie 3.
Różnice między RANK(), DENSE_RANK(), a ROW_NUMBER()
RANK() nie jest jedyną funkcją do numerowania wierszy. Warto znać różnice między nią a innymi pokrewnymi funkcjami:
- RANK(): Nadaje to samo miejsce dla identycznych wartości, a następnie przeskakuje numery.
- DENSE_RANK(): Działa podobnie jak
RANK()
, ale nie przeskakuje liczb. - ROW_NUMBER(): Nadaje unikalną liczbę każdemu rekordowi, niezależnie od wartości.
Porównajmy ich zachowanie na podstawie wcześniejszej tabeli:
SELECT ID, Imię, Stanowisko, Wynagrodzenie,
RANK() OVER (ORDER BY Wynagrodzenie DESC) AS Ranga,
DENSE_RANK() OVER (ORDER BY Wynagrodzenie DESC) AS Gęsta_Ranga,
ROW_NUMBER() OVER (ORDER BY Wynagrodzenie DESC) AS Numer_Wiersza
FROM Pracownicy;
Efekt w tabeli:
ID | Imię | Wynagrodzenie | RANK() | DENSE_RANK() | ROW_NUMBER() |
---|---|---|---|---|---|
1 | Anna | 12000 | 1 | 1 | 1 |
2 | Jan | 10000 | 2 | 2 | 2 |
3 | Magda | 10000 | 2 | 2 | 3 |
4 | Marek | 8000 | 4 | 3 | 4 |
Podsumowanie
Funkcja RANK()
w SQL to świetne narzędzie do przypisywania rang w zestawieniach. Jest przydatna szczególnie przy analizie danych, gdzie istotne jest uwzględnienie remisów i zachowanie logicznej kolejności numerowania. Warto również znać różnice między nią a funkcjami DENSE_RANK()
oraz ROW_NUMBER()
, aby dobrać odpowiednie rozwiązanie do konkretnej potrzeby.
Inny ciekawy artykuł:
Jak działa PIVOT w języku SQL? Przykłady zastosowania
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.