Ranking Postgresa

Ranking Postgresa



W PostgreSQL funkcja rank() jest funkcją okna, która pozwala nam przypisać rangę do każdego wiersza w zestawie wyników na podstawie zadanych kryteriów sortowania. Podobnie jak większość funkcji okna, funkcja rang jest przydatna w zapytaniach analitycznych, takich jak określanie rangi wiersza względem innych w danym zbiorze wyników.

W tym samouczku opisano, jak pracować z funkcjami PostgreSQL. Przyjrzymy się również składni i parametrom funkcji oraz przyjrzymy się kilku praktycznym przykładom.

Funkcja PostgreSQL Rank().

Poniżej przedstawiono składnię funkcji rank() w PostgreSQL:







RANK() OVER (PARTYCJA BY wyrażenie_partycji ORDER BY wyrażenie_sortowania [ASC|DESC])

Zaczynamy od wywołania funkcji rank(). Następnie używamy słowa kluczowego OVER, aby wskazać, że chcemy wykonać operację funkcji okna.



Dalej jest PARTITION BY partition_expression. Ta klauzula dzieli wiersze na różne partycje na podstawie podanego wyrażenia. Ranking odbywa się niezależnie w każdej partycji, gdzie wartość całkowita rangi zaczyna się od 1 dla każdej nowej partycji.



Wreszcie mamy klauzulę ORDER BY, która określa kolumnę lub wyrażenie określające kolejność wierszy.





Przykład funkcji PostgreSQL Rank().

Poniższe zapytanie demonstruje podstawowy przykład użycia funkcji rank() PostgreSQL:

SELECT wartość, RANK() OVER (ORDER BY wartość) AS ranga
Z (
WARTOŚCI (10), (20), (5), (15), (10)
) AS dane(wartość);

W tym przykładzie oceniamy wartości na podstawie ich rosnącej kolejności. Dwóm wystąpieniom wartości przypisywana jest ta sama ranga, ponieważ są one podobne i pojawiają się na tej samej pozycji w kolejności.



Wynikowa tabela jest następująca:

SELECT wartość, RANK() OVER (PARTITION BY wartość % 2 ​​ORDER BY wartość) AS ranga
Z (
WARTOŚCI (10), (20), (5), (15), (10)
) AS dane(wartość);

Przykład funkcji PostgreSQL Rank() z klauzulą ​​Partition By

Rozważ następujący przykład:

SELECT wartość, RANK() OVER (PARTITION BY wartość % 2 ​​ORDER BY wartość) AS ranga
Z (
WARTOŚCI (10), (20), (5), (15), (10)
) AS dane(wartość);

W tym przykładzie dodaliśmy klauzulę PARTITION BY z wyrażeniem, które sprawdza, czy wartość jest liczbą parzystą czy nieparzystą. Powinno to skutecznie pogrupować wartości w dwie partycje: jedną dla liczb parzystych (gdzie reszta to 0), a drugą dla liczb nieparzystych (gdzie reszta to 1).

Otrzymany zestaw przedstawia się następująco:

Przykład funkcji PostgreSQL Rank() przez połączenie wielu funkcji SQL

Możesz także tworzyć bardziej złożone zapytania za pomocą funkcji rank(). Weźmy na przykład bazę danych Pagila. Załóżmy, że chcemy pobrać pięciu najlepszych klientów na podstawie ich całkowitych opłat za wynajem i przypisać im rangi.

Możemy użyć funkcji rank(), jak pokazano w poniższym zapytaniu:

WYBIERZ identyfikator_klienta, imię, nazwisko, sumę_płatności,
RANK() OVER (ORDER BY total_payments DESC) AS ranga
Z (
SELECT c.identyfikator_klienta, c.imię, c.nazwisko, SUMA(p.kwota) AS suma_płatności
OD klienta c
DOŁĄCZ do płatności p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS klient_płatności
KOLEJNOŚĆ WEDŁUG rangi
LIMIT 10;

W tym przykładzie wybieramy customer_id, first_name, last_name, total_payment i przypisaną rank(). Następnie używamy funkcji rank() w celu przypisania rangi każdemu klientowi na podstawie total_payment posortowanej malejąco.

Wewnętrzne podzapytanie pozwala nam obliczyć łączne płatności dla każdego klienta, łącząc tabele klientów i płatności. Następnie grupujemy wynik na podstawie kolumn customer_id, first_name i last_name, aby pobrać sumę płatności dla każdego klienta.

Na koniec w zapytaniu zewnętrznym stosujemy funkcję rank() do zestawu wyników i porządkujemy ją według sumy_płatności w porządku rosnącym. Dołączamy również klauzulę limitu, aby pobrać tylko 10 pierwszych wierszy.

Jak widzisz, możesz generować bardziej wnikliwe dane, łącząc wiele funkcji SQL, takich jak sortowanie, filtrowanie, agregowanie, łączenie i inne.

Wniosek

Zbadaliśmy, jak możemy pracować z funkcją rank() w PostgreSQL, aby pobrać rangę danego wiersza z zestawu wyników na podstawie zdefiniowanych warunków. Omówiliśmy również sposób łączenia funkcji rank() z innymi narzędziami SQL w celu tworzenia bardziej złożonych zapytań.