Postgres rangas

Postgres Rangas



„PostgreSQL“ funkcija rank() yra lango funkcija, leidžianti priskirti reitingą kiekvienai rezultatų rinkinio eilutei pagal pateiktus rūšiavimo kriterijus. Kaip ir dauguma langų funkcijų, rango funkcija yra naudinga atliekant analitines užklausas, pvz., nustatant eilutės reitingą, palyginti su kitomis tam tikroje rezultatų rinkinio eilutėmis.

Šioje pamokoje nagrinėjama, kaip dirbti su PostgreSQL funkcijomis. Taip pat išnagrinėjame funkcijų sintaksę ir parametrus bei pateikiame keletą praktinių pavyzdžių.

PostgreSQL Rank() funkcija

Toliau parodyta funkcijos rank () sintaksė PostgreSQL:







RANK() OVER (SKYRIUS PAGAL skaidinio_reiškinį ORDER BY rūšiavimo_išreiškimas [ASC|DESC])

Pradedame iškvietę rank() funkciją. Tada naudojame raktinį žodį OVER, norėdami nurodyti, kad norime atlikti lango funkcijos operaciją.



Kitas yra PARTITION BY partition_expression. Ši sąlyga padalija eilutes į įvairius skaidinius pagal pateiktą išraišką. Reitingavimas atliekamas atskirai kiekviename skaidinyje, kur kiekvieno naujo skaidinio reitingo sveikojo skaičiaus reikšmė prasideda nuo 1.



Galiausiai turime sąlygą ORDER BY, kuri nurodo stulpelį arba išraišką, kuri apibrėžia eilučių tvarką.





PostgreSQL Rank() funkcijos pavyzdys

Ši užklausa parodo pagrindinį PostgreSQL funkcijos rank() naudojimo pavyzdį:

SELECT reikšmė, RANK() OVER (ORDER BY reikšmė) AS reitingas
NUO (
VERTĖS (10), (20), (5), (15), (10)
) AS duomenys(reikšmė);

Šiame pavyzdyje reikšmes reitinguojame pagal jų didėjimo tvarką. Du vertės atvejai priskiriami tuo pačiu rangu, nes jie yra panašūs ir yra toje pačioje užsakymo pozicijoje.



Gauta lentelė yra tokia:

SELECT reikšmė, RANK() OVER (PARTITION BY vertė % 2 ORDER BY reikšmė) AS reitingas
NUO (
VERTĖS (10), (20), (5), (15), (10)
) AS duomenys(reikšmė);

PostgreSQL Rank() funkcijos pavyzdys su skirsnimu pagal sąlygą

Apsvarstykite šį pavyzdį:

SELECT reikšmė, RANK() OVER (PARTITION BY vertė % 2 ORDER BY reikšmė) AS reitingas
NUO (
VERTĖS (10), (20), (5), (15), (10)
) AS duomenys(reikšmė);

Šiame pavyzdyje mes įtraukėme sąlygą PARTITION BY su išraiška, kuri patikrina, ar reikšmė yra lyginis ar nelyginis skaičius. Tai turėtų veiksmingai sugrupuoti reikšmes į du skirsnius: vieną, skirtą lyginiams skaičiams (kur likusioji dalis yra 0), o kitą - nelyginiams skaičiams (kai liekana yra 1).

Gautas rinkinys yra toks:

PostgreSQL Rank() funkcijos pavyzdys sujungiant kelias SQL funkcijas

Taip pat galite kurti sudėtingesnes užklausas naudodami rank() funkciją. Pavyzdžiui, paimkite Pagila duomenų bazę. Tarkime, kad norime surinkti penkis geriausius klientus pagal jų bendrą nuomos mokėjimą ir priskirti jiems reitingus.

Galime naudoti rank() funkciją, kaip parodyta šioje užklausoje:

PASIRINKITE kliento_id, vardą, pavardę, iš viso_mokėjimų,
RANKO () VIRŠINĖ (ORDER BY total_payments DESC) AS reitingas
NUO (
PASIRINKITE c.kliento_id, c.vardas, c.pavardė, SUM(suma) AS total_payments
IŠ kliento c
PRISIJUNGTI prie mokėjimo p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.pavard_vardas
) AS customer_payments
UŽSAKYTI PAGAL rangą
RIBA 10;

Šiame pavyzdyje pasirenkame kliento_id, vardą, pavardę, total_payment ir priskirtą rangą(). Tada naudojame funkciją rank() norėdami priskirti reitingą kiekvienam klientui pagal total_payment, kuris surūšiuotas mažėjančia tvarka.

Vidinė antrinė užklausa leidžia sujungiant kliento ir mokėjimų lenteles apskaičiuoti kiekvieno kliento mokėjimus. Tada sugrupuojame rezultatą pagal stulpelius customer_id, first_name ir last_name, kad gautume kiekvieno kliento mokėjimų sumą.

Galiausiai išorinėje užklausoje rezultatų rinkiniui pritaikome rank() funkciją ir išdėstome ją total_payments didėjimo tvarka. Taip pat įtraukiame ribinę sąlygą, kad būtų gautos tik 10 geriausių eilučių.

Kaip matote, galite generuoti įžvalgesnius duomenis derindami kelias SQL funkcijas, tokias kaip rūšiavimas, filtravimas, agregatai, sujungimai ir kt.

Išvada

Ištyrėme, kaip galime dirbti su rank() funkcija PostgreSQL, kad gautume tam tikros eilutės reitingą iš rezultatų rinkinio pagal apibrėžtas sąlygas. Taip pat aptarėme, kaip sujungti rank() funkciją su kitais SQL įrankiais, kad būtų sukurtos sudėtingesnės užklausos.