Postgres-rang

Postgres Rang



In PostgreSQL is de functie rank() een Window-functie waarmee we een rang kunnen toekennen aan elke rij binnen een resultatenset op basis van bepaalde sorteercriteria. Zoals de meeste vensterfuncties, is de rangfunctie nuttig bij analytische query's, zoals het bepalen van de rangorde van een rij die relatief is ten opzichte van andere rijen in een bepaalde resultatenset.

Deze tutorial onderzoekt hoe te werken met de PostgreSQL-functies. We verkennen ook de functiesyntaxis en parameters en bekijken enkele praktische voorbeelden.

PostgreSQL Rank() Functie

Het volgende toont de syntaxis van de functie rank() in PostgreSQL:







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

We beginnen met het aanroepen van de functie rank(). Vervolgens gebruiken we het sleutelwoord OVER om aan te geven dat we een vensterfunctiebewerking willen uitvoeren.



Het volgende is de PARTITIE DOOR partitie_expressie. Deze clausule verdeelt de rijen in verschillende partities op basis van een bepaalde uitdrukking. De classificatie wordt onafhankelijk uitgevoerd in elke partitie, waarbij de integerwaarde van de rangorde begint bij 1 voor elke nieuwe partitie.



Ten slotte hebben we de ORDER BY-clausule die de kolom of uitdrukking specificeert die de rijvolgorde bepaalt.





PostgreSQL Rank() Functie Voorbeeld

De volgende query demonstreert een basisvoorbeeld van het gebruik van de functie rank() van PostgreSQL:

SELECT waarde, RANK() OVER (ORDER BY waarde) AS rang
VAN (
WAARDEN (10), (20), (5), (15), (10)
) AS-gegevens(waarde);

In dit voorbeeld rangschikken we de waarden op basis van hun oplopende volgorde. De twee voorkomens van de waarde krijgen dezelfde rang toegewezen omdat ze vergelijkbaar zijn en op dezelfde positie in de bestelling verschijnen.



De resulterende tabel is als volgt:

SELECT waarde, RANK() OVER (PARTITION BY waarde % 2 ORDER BY waarde) AS rang
VAN (
WAARDEN (10), (20), (5), (15), (10)
) AS-gegevens(waarde);

Voorbeeld van PostgreSQL Rank()-functie met de Partition By-clausule

Beschouw het volgende voorbeeld:

SELECT waarde, RANK() OVER (PARTITION BY waarde % 2 ORDER BY waarde) AS rang
VAN (
WAARDEN (10), (20), (5), (15), (10)
) AS-gegevens(waarde);

In dit voorbeeld hebben we de clausule PARTITION BY toegevoegd met een uitdrukking die controleert of de waarde een even of oneven getal is. Dit zou de waarden effectief moeten groeperen in twee partities: één voor even getallen (waarbij de rest 0 is) en de andere voor oneven getallen (waarbij de rest 1 is).

De resulterende set is als volgt:

Voorbeeld van PostgreSQL Rank()-functie door meerdere SQL-functies te combineren

U kunt ook complexere query's maken met behulp van de functie rank(). Neem bijvoorbeeld de Pagila-database. Stel dat we de top vijf klanten willen ophalen op basis van hun totale huurbetalingen en rangschikkingen aan hen willen toewijzen.

We kunnen de functie rank() gebruiken zoals weergegeven in de volgende query:

SELECT klant_id, voornaam, achternaam, totale_betalingen,
RANK() OVER (ORDER BY total_payments DESC) AS rang
VAN (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
VAN klant c
DOE MEE betaling p AAN c.customer_id = p.customer_id
GROEP OP c.customer_id, c.first_name, c.last_name
) AS klant_betalingen
BESTEL PER RANG
LIMIET 10;

In dit voorbeeld selecteren we de customer_id, first_name, last_name, total_payment en de toegewezen rang(). Vervolgens gebruiken we de functie rang() om elke klant een rang toe te kennen op basis van de totale_betaling die in aflopende volgorde is gesorteerd.

Met de interne subquery kunnen we de totale betalingen voor elke klant berekenen door de klant- en betalingstabellen samen te voegen. Vervolgens groeperen we het resultaat op basis van de kolommen customer_id, first_name en last_name om de som van betalingen voor elke klant op te halen.

Ten slotte passen we in de buitenste query de functie rank() toe op de resultatenset en ordenen deze op total_payments in oplopende volgorde. We voegen ook de limietclausule toe om alleen de bovenste 10 rijen op te halen.

Zoals u kunt zien, kunt u meer inzichtelijke gegevens genereren door meerdere SQL-functies te combineren, zoals sorteren, filteren, aggregaties, joins en meer.

Conclusie

We hebben onderzocht hoe we met de functie rank() in PostgreSQL kunnen werken om de rangorde van een bepaalde rij op te halen uit een resultatenset op basis van de gedefinieerde voorwaarden. We hebben ook besproken hoe de functie rank() kan worden gecombineerd met andere SQL-tools om complexere query's te maken.