Postgres rang

Postgres Rang



U PostgreSQL-u, funkcija rank() je funkcija prozora koja nam omogućuje dodjeljivanje ranga svakom retku unutar skupa rezultata na temelju zadanih kriterija sortiranja. Kao i većina prozorskih funkcija, funkcija rangiranja je korisna u analitičkim upitima kao što je određivanje ranga retka koji je relativan u odnosu na druge u danom skupu rezultata.

Ovaj vodič istražuje kako raditi s PostgreSQL funkcijama. Također istražujemo sintaksu i parametre funkcije i gledamo neke praktične primjere.

Funkcija PostgreSQL Rank().

Sljedeće prikazuje sintaksu funkcije rank() u PostgreSQL-u:







RANK() PREKO (PARTICIJA PO particionom_izrazu ORDER BY sort_expression [ASC|DESC])

Počinjemo pozivanjem funkcije rank(). Zatim koristimo ključnu riječ OVER da naznačimo da želimo izvršiti operaciju funkcije prozora.



Sljedeći je particijski_izraz PARTITION BY. Ova klauzula dijeli retke u različite particije na temelju danog izraza. Rangiranje se vrši neovisno u svakoj particiji gdje vrijednost cijelog broja ranga počinje od 1 za svaku novu particiju.



Konačno, imamo klauzulu ORDER BY koja specificira stupac ili izraz koji određuje redoslijed retka.





Primjer PostgreSQL Rank() funkcije

Sljedeći upit pokazuje osnovni primjer korištenja PostgreSQL-ove funkcije rank():

SELECT vrijednost, RANK() OVER (ORDER BY vrijednost) AS rang
OD (
VRIJEDNOSTI (10), (20), (5), (15), (10)
) AS podatak(vrijednost);

U ovom primjeru vrijednosti rangiramo prema njihovom uzlaznom redoslijedu. Dva pojavljivanja vrijednosti dodjeljuju se s istim rangom jer su slične i pojavljuju se na istoj poziciji unutar poretka.



Dobivena tablica je sljedeća:

SELECT vrijednost, RANK() OVER (PARTITION BY vrijednost % 2 ORDER BY vrijednost) AS rang
OD (
VRIJEDNOSTI (10), (20), (5), (15), (10)
) AS podatak(vrijednost);

Primjer PostgreSQL Rank() funkcije s klauzulom Partition By

Razmotrite sljedeći primjer:

SELECT vrijednost, RANK() OVER (PARTITION BY vrijednost % 2 ORDER BY vrijednost) AS rang
OD (
VRIJEDNOSTI (10), (20), (5), (15), (10)
) AS podatak(vrijednost);

U ovom smo primjeru dodali klauzulu PARTITION BY s izrazom koji provjerava je li vrijednost paran ili neparan broj. Ovo bi trebalo učinkovito grupirati vrijednosti u dvije particije: jednu za parne brojeve (gdje je ostatak 0) i drugu za neparne brojeve (gdje je ostatak 1).

Rezultirajući skup je sljedeći:

Primjer PostgreSQL Rank() funkcije kombiniranjem više SQL značajki

Također možete izraditi složenije upite pomoću funkcije rank(). Uzmimo za primjer bazu podataka Pagila. Pretpostavimo da želimo dohvatiti prvih pet kupaca na temelju njihovih ukupnih plaćanja najma i dodijeliti im rangove.

Možemo koristiti funkciju rank() kao što je prikazano u sljedećem upitu:

SELECT customer_id, first_name, last_name, total_payments,
RANK() PREKO (POREDAK PO total_payments DESC) KAO rang
OD (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
OD kupca c
PRIDRUŽITE se plaćanju p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS customer_payments
POREDAK PO rangu
OGRANIČENJE 10;

U ovom primjeru odabiremo customer_id, first_name, last_name, total_payment i dodijeljeni rank(). Zatim koristimo funkciju rank() da dodijelimo rang svakom kupcu na temelju total_payment koji je poredan silaznim redoslijedom.

Unutarnji podupit omogućuje nam izračunavanje ukupnih plaćanja za svakog kupca spajanjem tablica kupaca i plaćanja. Zatim grupiramo rezultat na temelju stupaca customer_id, first_name i last_name kako bismo dohvatili zbroj plaćanja za svakog kupca.

Konačno, u vanjskom upitu primjenjujemo funkciju rank() na skup rezultata i poredamo ga prema total_payments uzlaznim redoslijedom. Također uključujemo klauzulu ograničenja za dohvaćanje samo prvih 10 redaka.

Kao što vidite, možete generirati pronicljivije podatke kombiniranjem višestrukih SQL značajki kao što su sortiranje, filtriranje, agregati, spajanja i više.

Zaključak

Istražili smo kako možemo raditi s funkcijom rank() u PostgreSQL-u da dohvatimo rang zadanog retka iz skupa rezultata na temelju definiranih uvjeta. Također smo opisali kako kombinirati funkciju rank() s drugim SQL alatima za stvaranje složenijih upita.