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 rangFRA (
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 rangFRA (
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 rangFRA (
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.