Denne opplæringen utforsker hvordan du arbeider med PostgreSQL-funksjonene. Vi utforsker også funksjonens syntaks og parametere og ser på noen praktiske eksempler.
PostgreSQL Rank() funksjon
Følgende viser syntaksen til rank()-funksjonen i PostgreSQL:
RANK() OVER (PARTISJON ETTER partisjonsuttrykk ORDER BY sort_expression [ASC|DESC])
Vi starter med å kalle rank() funksjonen. Vi bruker deretter nøkkelordet OVER for å indikere at vi ønsker å utføre en vindusfunksjonsoperasjon.
Neste er PARTITION BY partisjonsuttrykk. Denne klausulen deler radene inn i ulike partisjoner basert på et gitt uttrykk. Rangeringen gjøres uavhengig i hver partisjon der rangeringen av heltallsverdien starter på 1 for hver ny partisjon.
Til slutt har vi ORDER BY-leddet som spesifiserer kolonnen eller uttrykket som bestemmer rekkefølgen.
PostgreSQL Rank() funksjonseksempel
Følgende spørring viser et grunnleggende eksempel på bruk av PostgreSQLs rank()-funksjon:
SELECT verdi, RANK() OVER (ORDER BY verdi) SOM rangeringFRA (
VERDIER (10), (20), (5), (15), (10)
) AS-data(verdi);
I dette eksemplet rangerer vi verdiene basert på deres stigende rekkefølge. De to forekomstene av verdien tildeles samme rangering da de er like og vises i samme posisjon i rekkefølgen.
Den resulterende tabellen er som følger:
SELECT verdi, RANK() OVER (PARTISERING ETTER verdi % 2 ORDER BY verdi) SOM rangeringFRA (
VERDIER (10), (20), (5), (15), (10)
) AS-data(verdi);
PostgreSQL Rank()-funksjonseksempel med Partition By-klausulen
Tenk på følgende eksempel:
SELECT verdi, RANK() OVER (PARTISERING ETTER verdi % 2 ORDER BY verdi) SOM rangeringFRA (
VERDIER (10), (20), (5), (15), (10)
) AS-data(verdi);
I dette eksemplet la vi til PARTITION BY-leddet med et uttrykk som sjekker om verdien er et partall eller et oddetall. Dette burde effektivt gruppere verdiene i to partisjoner: en for partall (hvor resten er 0) og den andre for oddetall (hvor resten er 1).
Det resulterende settet er som følger:
PostgreSQL Rank()-funksjonseksempel ved å kombinere flere SQL-funksjoner
Du kan også lage mer komplekse søk ved å bruke rank()-funksjonen. Ta for eksempel Pagila-databasen. Anta at vi ønsker å hente de fem beste kundene basert på deres totale leiebetalinger og tildele dem rangeringer.
Vi kan bruke rank()-funksjonen som vist i følgende spørring:
SELECT customer_id, first_name, last_name, total_payments,RANK() OVER (ORDER BY total_payments DESC) SOM rangering
FRA (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
FRA kunde c
BLI MED betaling p PÅ c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS kunde_betalinger
BESTILL ETTER rangering
GRENSE 10;
I dette eksemplet velger vi customer_id, first_name, last_name, total_payment og den tildelte rangeringen(). Deretter bruker vi rank()-funksjonen til å tilordne en rangering til hver kunde basert på total_payment som er sortert i synkende rekkefølge.
Den indre underspørringen lar oss beregne de totale betalingene for hver kunde ved å slå sammen kunde- og betalingstabellene. Vi grupperer deretter resultatet basert på kolonnene kunde_id, fornavn og etternavn for å hente summen av betalinger for hver kunde.
Til slutt, i den ytre spørringen, bruker vi rank()-funksjonen over resultatsettet og bestiller det etter total_payments i stigende rekkefølge. Vi inkluderer også grensesatsen for å hente bare de 10 øverste radene.
Som du kan se, kan du generere mer innsiktsfulle data ved å kombinere flere SQL-funksjoner som sortering, filtrering, aggregater, sammenføyninger og mer.
Konklusjon
Vi utforsket hvordan vi kan jobbe med rank()-funksjonen i PostgreSQL for å hente rangeringen til en gitt rad fra et resultatsett basert på de definerte betingelsene. Vi dekket også hvordan du kombinerer rank()-funksjonen med andre SQL-verktøy for å lage mer komplekse spørringer.