Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds

Funkcje okna - rankingi w Bibliotece

Czasem chcemy nie tylko pobrać wiersze, ale też ponumerować je albo nadać im rangę wewnątrz grupy. Do tego służą funkcje okna (window functions).

ROW_NUMBER - kolejny numer

ROW_NUMBER()
nadaje każdemu wierszowi kolejny numer według wskazanego porządku:

1SELECT tytul, cena,
2       ROW_NUMBER() OVER (ORDER BY cena) AS numer
3FROM ksiazki;

Najtańsza księga dostanie numer 1, kolejna 2, i tak dalej. Klauzula

OVER (ORDER BY ...)
mówi, według czego liczymy.

RANK - ranga z remisami

RANK()
działa podobnie, ale księgi o tej samej cenie dostają tę samą rangę, a kolejna ranga zostaje pominięta (1, 2, 2, 4).

1SELECT tytul, cena,
2       RANK() OVER (ORDER BY cena DESC) AS ranga
3FROM ksiazki;

PARTITION BY - rankingi w grupach

Z

PARTITION BY
numerujemy osobno w każdej grupie. Tak ustawimy ranking ksiąg wg ceny wewnątrz każdej kategorii:

1SELECT tytul, kategoria_id, cena,
2       ROW_NUMBER() OVER (PARTITION BY kategoria_id ORDER BY cena DESC) AS miejsce
3FROM ksiazki;

Licznik resetuje się dla każdej kategorii. Funkcje okna to potężna luneta Strażnika - pozwalają porównywać i rankingować bez gubienia pojedynczych wierszy.

Przejdź do CodeWorlds