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 rangDE 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 rangDE 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 rangDE 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.