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.

code-459070_1920

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:

ID Imie Nazwisko Data_urodzenia Stanowisko Data_zatrudnienia
1 Jan Kowalski 1984-12-23 Programista 1999-12-09
2 Adam Adamiak 1991-08-08 Menadżer 2011-01-31
3 Jakub Kowalik 1990-03-16 Programista 2010-01-04
4 Michał Jakubiak 1981-05-02 Projektant 1998-09-22

ROW_NUMBER

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

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:

Imie Nazwisko ROW_NUMBER
Adam Adamiak 1
Jakub Kowalik 2
Jan Kowalski 3
Michał Jakubiak 4

DENSE_RANK()

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

Efekt:

Stanowisko DENSE_RANK
Menadżer 1
Programista 2
Programista 2
Projektant 3

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:

Efekt:

Stanowisko DENSE_RANK
Menadżer 1
Programista 2
Programista 2
Projektant 3

NTILE()

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

Efekt:

Imie Nazwisko NTILE
Adam Adamiak 1
Jakub Kowalik 1
Jan Kowalski 2
Michał Jakubiak 2

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

Efekt:

Imie Nazwisko NTILE
Adam Adamiak 1
Jakub Kowalik 1
Jan Kowalski 2
Michał Jakubiak 3

Trzeci przykład:

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

Efekt:

Imie Nazwisko NTILE
Adam Adamiak 1
Jakub Kowalik 2
Jan Kowalski 3
Michał Jakubiak 4

, , , , , , , ,