
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, PowerBI, Tableau i Pythona z certyfikatami!
🟨 Ekskluzywana ale pomagająca sobie społeczność.
🟩 Ponad 75 godzin materiałów video.
🟨 Spotkania LIVE co miesiąc.
🟩 Mój osobisty mentoring.

