Postgres rangering

Postgres Rangering



I PostgreSQL er rank()-funksjonen en Window-funksjon som lar oss tilordne en rangering til hver rad i et resultatsett basert på et gitt sorteringskriterium. Som de fleste vindusfunksjoner er rangeringsfunksjonen fordelaktig i analytiske spørringer som å bestemme rangeringen av en rad som er i forhold til andre i et gitt resultatsett.

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 rangering
FRA (
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 rangering
FRA (
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 rangering
FRA (
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.