Postgres Rank

Postgres Rank



PostgreSQL-is on funktsioon rank() funktsioon Window, mis võimaldab meil määrata igale tulemuste komplekti reale järjestuse antud sortimiskriteeriumide alusel. Nagu enamik aknafunktsioone, on järjestusfunktsioon kasulik analüütilistes päringutes, näiteks rea auastme määramisel, mis on antud tulemuste komplektis teistega võrreldes.

See õpetus uurib, kuidas töötada PostgreSQL-i funktsioonidega. Uurime ka funktsiooni süntaksit ja parameetreid ning vaatame mõningaid praktilisi näiteid.

PostgreSQL Rank() funktsioon

Järgmine näitab funktsiooni rank() süntaksit PostgreSQL-is:







RANK() OVER (PARTITSIOONI JÄRGI partitsiooni_avaldis ORDER BY sortimise_avaldise järgi [ASC|DESC])

Alustame funktsiooni rank() kutsumisega. Seejärel kasutame märksõna ÜLE, et näidata, et soovime teha aknafunktsiooni toimingut.



Järgmine on PARTITION BY partitsiooniavaldis. See klausel jagab read etteantud avaldise alusel erinevateks partitsioonideks. Järjestus tehakse igas sektsioonis eraldi, kus iga uue partitsiooni järgu täisarv algab 1-st.



Lõpuks on meil klausel ORDER BY, mis määrab veeru või avaldise, mis määrab ridade järjestuse.





PostgreSQL Rank() funktsiooni näide

Järgmine päring näitab PostgreSQL-i funktsiooni rank() kasutamise põhinäidet:

SELECT väärtus, RANK() OVER (ORDER BY väärtus) AS järjestus
FROM (
VÄÄRTUSED (10), (20), (5), (15), (10)
) AS-i andmed(väärtus);

Selles näites järjestame väärtused nende kasvavas järjekorras. Väärtuse kahele esinemiskohale määratakse sama auaste, kuna need on sarnased ja esinevad järjestuses samal positsioonil.



Saadud tabel on järgmine:

SELECT väärtus, RANK() OVER (PARTITION BY väärtus % 2 ORDER BY väärtus) AS asetus
FROM (
VÄÄRTUSED (10), (20), (5), (15), (10)
) AS-i andmed(väärtus);

PostgreSQL Rank() funktsiooni näide koos partitsiooni klausliga

Kaaluge järgmist näidet:

SELECT väärtus, RANK() OVER (PARTITION BY väärtus % 2 ORDER BY väärtus) AS asetus
FROM (
VÄÄRTUSED (10), (20), (5), (15), (10)
) AS-i andmed(väärtus);

Selles näites lisasime lause PARTITION BY koos avaldisega, mis kontrollib, kas väärtus on paaris või paaritu arv. See peaks tõhusalt rühmitama väärtused kahte sektsiooni: üks paarisarvude jaoks (kus jääk on 0) ja teine ​​paaritute arvude jaoks (kus jääk on 1).

Saadud komplekt on järgmine:

PostgreSQL Rank() funktsiooni näide mitme SQL-i funktsiooni kombineerimisel

Funktsiooni rank() abil saate luua ka keerukamaid päringuid. Võtke näiteks Pagila andmebaas. Oletame, et soovime välja tuua viis parimat klienti nende rendimaksete kogusumma alusel ja määrata neile auastmed.

Saame kasutada funktsiooni rank(), nagu on näidatud järgmises päringus:

SELECT kliendi_id, eesnimi, perekonnanimi, maksed kokku,
RANK() ÜLE (ORDER BY kogu_maksete DESC järgi) AS aste
FROM (
SELECT c.customer_id, c.first_name, c.perenimi, SUM(summa) AS kogu_maksed
Kliendilt c
LIITU maksega p ON c.customer_id = p.customer_id
GROUP BY c.kliendi_id, c.eesnimi, c.perenimi
) AS kliendi_maksed
JÄRJESTUS järgu järgi
LIIT 10;

Selles näites valime kliendi_id, eesnimi, perekonnanimi, kogu_makse ja määratud auaste(). Seejärel kasutame funktsiooni rank(), et määrata igale kliendile järjestus total_payment alusel, mis on sorteeritud kahanevas järjekorras.

Sisemine alampäring võimaldab meil arvutada iga kliendi maksete kogusumma, ühendades kliendi- ja maksetabelid. Seejärel rühmitame tulemuse veergude kliendi_id, eesnimi ja perekonnanimi alusel, et hankida iga kliendi maksete summa.

Lõpuks rakendame välimises päringus tulemuskomplektile funktsiooni rank() ja järjestame selle kasvavas järjekorras total_payments järgi. Lisame ka piirklausli, et tuua ainult kümme ülemist rida.

Nagu näete, saate luua põhjalikumaid andmeid, kombineerides mitut SQL-i funktsiooni, nagu sortimine, filtreerimine, agregaadid, liitumised ja palju muud.

Järeldus

Uurisime, kuidas saame töötada PostgreSQL-i funktsiooni rank() abil, et tuua kindlaks määratud tingimustel põhinevast tulemikomplektist antud rea auaste. Samuti käsitlesime, kuidas kombineerida funktsiooni rank() teiste SQL-i tööriistadega, et luua keerukamaid päringuid.