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() 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() 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;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.