Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Grupowanie danych: Funkcje rankingowe w SQL cz. III

Funkcje rankingowe w SQL mogą być wywoływane tylko i wyłącznie dla utworzonych za pomocą klauzuli OVER() partycji. W przeciwieństwie do funkcji grupujących które mogą być uruchamiane między innymi dla grup utworzonych przy pomocy operatora GROUP BY.

UWAGA: Omawiany funkcje działają na bazach danych firmy Microsoft.

Najpopularniejsze funkcje rankingowe:

  • ROW_NUMBER(),
  • DENSE_RANK(),
  • RANK(),
  • NTILE().

Tabela pracownicy, na której będziemy uruchamiać przykładowe zapytania:

IDImieNazwiskoData_urodzeniaStanowiskoData_zatrudnienia
1JanKowalski1984-12-23Programista1999-12-09
2AdamAdamiak1991-08-08Menadżer2011-01-31
3JakubKowalik1990-03-16Programista2010-01-04
4MichałJakubiak1981-05-02Projektant1998-09-22

ROW_NUMBER

Funkcja ta zwraca numer wiersza, innymi słowy po prostu numeruje wiersze:

SELECT Imie, Nazwisko,
ROW_NUMBER() OVER (ORDER BY Stanowisko) AS ROW_NUMBER
FROM pracownicy;

W powyższym przykładzie należy zwrócić szczególną uwagę na klauzulę ORDER BY (służy ona do sortowania danych), bez niej otrzymamy błąd.

Efekt naszego zapytania:

ImieNazwiskoROW_NUMBER
AdamAdamiak1
JakubKowalik2
JanKowalski3
MichałJakubiak4

DENSE_RANK()

Numeruje wiersze, z takim wyjątkiem, że dla powtarzających się danych zwraca ten sam numer wiersza:

SELECT Stanowisko, 
DENSE_RANK() OVER (ORDER BY Stanowisko) AS DENSE_RANK
FROM pracownicy;

Efekt:

StanowiskoDENSE_RANK
Menadżer1
Programista2
Programista2
Projektant3

RANK()

Działa identycznie jak funkcja DENSE_RANK() czyli numeruje wiersze, z takim wyjątkiem, że dla powtarzających się danych zwraca ten sam numer wiersza:

SELECT Stanowisko, 
RANK() OVER (ORDER BY Stanowisko) AS ROW_NUMBER
FROM pracownicy;

Efekt:

StanowiskoDENSE_RANK
Menadżer1
Programista2
Programista2
Projektant3

NTILE()

NTILE() dzieli wiersze wygenerowane przez zapytanie, na określoną ilość bloków:

SELECT Imie, Nazwisko,
NTILE(2) OVER (ORDER BY Stanowisko) AS NTILE
FROM pracownicy;

Efekt:

ImieNazwiskoNTILE
AdamAdamiak1
JakubKowalik1
JanKowalski2
MichałJakubiak2

Drugi przykład (dla nie parzystej liczby części w stosunku do liczby wierszy):

SELECT Imie, Nazwisko,
NTILE(3) OVER (ORDER BY Stanowisko) AS NTILE
FROM pracownicy;

Efekt:

ImieNazwiskoNTILE
AdamAdamiak1
JakubKowalik1
JanKowalski2
MichałJakubiak3

Trzeci przykład:

SELECT Imie, Nazwisko,
NTILE(4) OVER (ORDER BY Stanowisko) AS NTILE
FROM pracownicy;

Podział na 4 części, czyli każdy wiersz to osobna część.

Efekt:

ImieNazwiskoNTILE
AdamAdamiak1
JakubKowalik2
JanKowalski3
MichałJakubiak4

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , , , , ,

Dodaj komentarz

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest