Rang Postgres

Rang Postgres



În PostgreSQL, funcția rank() este o funcție Window care ne permite să atribuim un rang fiecărui rând dintr-un set de rezultate pe baza unui anumit criteriu de sortare. La fel ca majoritatea funcțiilor de fereastră, funcția rank este benefică în interogările analitice, cum ar fi determinarea rangului unui rând care este în raport cu altele dintr-un set de rezultate dat.

Acest tutorial explorează modul de lucru cu funcțiile PostgreSQL. Explorăm, de asemenea, sintaxa și parametrii funcției și analizăm câteva exemple practice.

Funcția PostgreSQL Rank().

Următoarele arată sintaxa funcției rank() în PostgreSQL:







RANK() OVER (PARTIȚIE BY expresie_partiție ORDER BY expresie_sort [ASC|DESC])

Începem prin a apela funcția rank(). Apoi folosim cuvântul cheie OVER pentru a indica faptul că dorim să efectuăm o operație de funcție de fereastră.



Urmează PARTITION BY expresie_partiție. Această clauză împarte rândurile în diferite partiții bazate pe o expresie dată. Clasificarea se face independent în fiecare partiție, unde valoarea întregului rang începe de la 1 pentru fiecare partiție nouă.



În cele din urmă, avem clauza ORDER BY care specifică coloana sau expresia care determină ordinea rândurilor.





Exemplu de funcție PostgreSQL Rank().

Următoarea interogare demonstrează un exemplu de bază de utilizare a funcției rank() PostgreSQL:

SELECTAȚI valoarea, RANK() OVER (ORDERA BY valoare) CA rang
DE LA (
VALORI (10), (20), (5), (15), (10)
) Date (valoare) AS;

În acest exemplu, clasăm valorile în funcție de ordinea lor crescătoare. Cele două apariții ale valorii sunt atribuite cu același rang, deoarece sunt similare și apar în aceeași poziție în cadrul ordinii.



Tabelul rezultat este următorul:

SELECTAȚI valoarea, RANK() OVER (PARTIȚIE BY valoarea % 2 ORDER BY valoare) CA rang
DE LA (
VALORI (10), (20), (5), (15), (10)
) Date (valoare) AS;

Exemplu de funcție PostgreSQL Rank() cu clauza Partition By

Luați în considerare următorul exemplu:

SELECTAȚI valoarea, RANK() OVER (PARTIȚIE BY valoarea % 2 ORDER BY valoare) CA rang
DE LA (
VALORI (10), (20), (5), (15), (10)
) Date (valoare) AS;

În acest exemplu, am adăugat clauza PARTITION BY cu o expresie care verifică dacă valoarea este un număr par sau impar. Aceasta ar trebui să grupeze efectiv valorile în două partiții: una pentru numerele pare (unde restul este 0) și cealaltă pentru numerele impare (unde restul este 1).

Setul rezultat este următorul:

Exemplu de funcție PostgreSQL Rank() prin combinarea mai multor caracteristici SQL

De asemenea, puteți crea interogări mai complexe folosind funcția rank(). De exemplu, luați baza de date Pagila. Să presupunem că dorim să luăm primii cinci clienți pe baza plăților lor totale de închiriere și să le atribuim ranguri.

Putem folosi funcția rank() așa cum se arată în următoarea interogare:

SELECT ID_client, prenume, prenume, plăți_totale,
RANK() OVER (ORDER BY total_payments DESC) AS rang
DE LA (
SELECTAȚI c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
DE LA client c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS client_plate
ORDENAȚI DUPĂ rang
LIMITA 10;

În acest exemplu, selectăm client_id, first_name, last_name, total_payment și rangul atribuit(). Apoi, folosim funcția rank() pentru a atribui un rang fiecărui client pe baza total_payment care este sortat în ordine descrescătoare.

Subinterogarea internă ne permite să calculăm plățile totale pentru fiecare client prin alăturarea clientului și a tabelelor de plăți. Apoi grupăm rezultatul pe baza coloanelor customer_id, first_name și last_name pentru a obține suma plăților pentru fiecare client.

În cele din urmă, în interogarea exterioară, aplicăm funcția rank() peste setul de rezultate și o ordonăm după total_payments în ordine crescătoare. Includem, de asemenea, clauza limită pentru a prelua numai primele 10 rânduri.

După cum puteți vedea, puteți genera date mai perspicace combinând mai multe funcții SQL, cum ar fi sortarea, filtrarea, agregarea, alăturarea și multe altele.

Concluzie

Am explorat cum putem lucra cu funcția rank() din PostgreSQL pentru a prelua rangul unui rând dat dintr-un set de rezultate bazat pe condițiile definite. Am abordat, de asemenea, cum să combinați funcția rank() cu alte instrumente SQL pentru a crea interogări mai complexe.