Postgres Rang

Postgres Rang



I PostgreSQL er rank()-funktionen en Window-funktion, der giver os mulighed for at tildele en rang til hver række i et resultatsæt baseret på et givet sorteringskriterie. Ligesom de fleste vinduesfunktioner er rangfunktionen fordelagtig i analytiske forespørgsler, såsom at bestemme rangeringen af ​​en række, der er i forhold til andre i et givet resultatsæt.

Denne vejledning udforsker, hvordan man arbejder med PostgreSQL-funktionerne. Vi udforsker også funktionen syntaks og parametre og ser på nogle praktiske eksempler.

PostgreSQL Rank() Funktion

Følgende viser syntaksen for rank()-funktionen i PostgreSQL:







RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression [ASC|DESC])

Vi starter med at kalde rank()-funktionen. Vi bruger derefter nøgleordet OVER for at indikere, at vi ønsker at udføre en vinduesfunktionsoperation.



Det næste er PARTITION BY partition_expression. Denne klausul opdeler rækkerne i forskellige partitioner baseret på et givet udtryk. Rangeringen udføres uafhængigt i hver partition, hvor rangheltalsværdien starter ved 1 for hver ny partition.



Til sidst har vi ORDER BY-sætningen, som specificerer den kolonne eller det udtryk, der bestemmer rækkefølgen.





PostgreSQL Rank() Funktionseksempel

Følgende forespørgsel viser et grundlæggende eksempel på brug af PostgreSQLs rank() funktion:

SELECT værdi, RANK() OVER (ORDER BY værdi) SOM rang
FRA (
VÆRDIER (10), (20), (5), (15), (10)
) AS-data(værdi);

I dette eksempel rangerer vi værdierne baseret på deres stigende rækkefølge. De to forekomster af værdien tildeles samme rang, da de ligner hinanden og vises på samme position i rækkefølgen.



Den resulterende tabel er som følger:

SELECT værdi, RANK() OVER (OPDELING EFTER værdi % 2 ORDER BY værdi) SOM rang
FRA (
VÆRDIER (10), (20), (5), (15), (10)
) AS-data(værdi);

PostgreSQL Rank() Funktionseksempel med Partition By-klausulen

Overvej følgende eksempel:

SELECT værdi, RANK() OVER (OPDELING EFTER værdi % 2 ORDER BY værdi) SOM rang
FRA (
VÆRDIER (10), (20), (5), (15), (10)
) AS-data(værdi);

I dette eksempel tilføjede vi PARTITION BY-udtrykket med et udtryk, der kontrollerer, om værdien er et lige eller et ulige tal. Dette burde effektivt gruppere værdierne i to partitioner: en for lige tal (hvor resten er 0) og den anden for ulige tal (hvor resten er 1).

Det resulterende sæt er som følger:

PostgreSQL Rank()-funktionseksempel ved at kombinere flere SQL-funktioner

Du kan også oprette mere komplekse forespørgsler ved hjælp af rank()-funktionen. Tag for eksempel Pagila-databasen. Antag, at vi ønsker at hente de fem bedste kunder baseret på deres samlede lejebetalinger og tildele dem rang.

Vi kan bruge rank()-funktionen som vist i følgende forespørgsel:

SELECT customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) SOM rang
FRA (
VÆLG c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
FRA kunde c
JOIN betaling p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS kunde_betalinger
BESTIL EFTER rang
GRÆNSE 10;

I dette eksempel vælger vi kunde_id, fornavn, efternavn, total_betaling og den tildelte rang(). Derefter bruger vi rank()-funktionen til at tildele en rang til hver kunde baseret på total_payment, der er sorteret i faldende rækkefølge.

Den indre underforespørgsel giver os mulighed for at beregne de samlede betalinger for hver kunde ved at slutte sig til kunde- og betalingstabellerne. Vi grupperer derefter resultatet baseret på kolonnerne kunde_id, fornavn og efternavn for at hente summen af ​​betalinger for hver kunde.

Til sidst, i den ydre forespørgsel, anvender vi funktionen rank() over resultatsættet og sorterer det efter total_payments i stigende rækkefølge. Vi inkluderer også grænsesætningen for kun at hente de øverste 10 rækker.

Som du kan se, kan du generere mere indsigtsfulde data ved at kombinere flere SQL-funktioner såsom sortering, filtrering, aggregater, joinforbindelser og mere.

Konklusion

Vi undersøgte, hvordan vi kan arbejde med funktionen rank() i PostgreSQL for at hente rangeringen af ​​en given række fra et resultatsæt baseret på de definerede betingelser. Vi dækkede også, hvordan man kombinerer rank()-funktionen med andre SQL-værktøjer for at skabe mere komplekse forespørgsler.