Postgres rangs

Postgres Rangs



Programmā PostgreSQL funkcija rank () ir loga funkcija, kas ļauj mums piešķirt rangu katrai rezultātu kopas rindai, pamatojoties uz noteiktiem kārtošanas kritērijiem. Tāpat kā lielākā daļa logu funkciju, ranga funkcija ir noderīga analītiskos vaicājumos, piemēram, nosakot rindas rangu, kas ir attiecībā pret citām noteiktā rezultātu kopā.

Šajā apmācībā ir izpētīts, kā strādāt ar PostgreSQL funkcijām. Mēs arī izpētām funkciju sintaksi un parametrus un aplūkojam dažus praktiskus piemērus.

PostgreSQL Rank() funkcija

Tālāk ir parādīta funkcijas rank () sintakse PostgreSQL:







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

Mēs sākam ar funkcijas rank() izsaukšanu. Pēc tam mēs izmantojam atslēgvārdu OVER, lai norādītu, ka vēlamies veikt loga funkcijas darbību.



Nākamais ir PARTITION BY partition_expression. Šī klauzula sadala rindas dažādos nodalījumos, pamatojoties uz doto izteiksmi. Rangēšana tiek veikta neatkarīgi katrā nodalījumā, kur katra jaunā nodalījuma ranga veselā skaitļa vērtība sākas ar 1.



Visbeidzot, mums ir klauzula ORDER BY, kas norāda kolonnu vai izteiksmi, kas nosaka rindu secību.





PostgreSQL Rank() funkcijas piemērs

Šis vaicājums parāda PostgreSQL funkcijas rank() izmantošanas pamata piemēru:

SELECT vērtība, RANK() OVER (ORDER BY vērtība) AS rangs
NO (
VĒRTĪBAS (10), (20), (5), (15), (10)
) AS dati(vērtība);

Šajā piemērā mēs ranžējam vērtības, pamatojoties uz to augošo secību. Abiem vērtības gadījumiem tiek piešķirts vienāds rangs, jo tie ir līdzīgi un secībā parādās vienā un tajā pašā pozīcijā.



Rezultātā iegūtā tabula ir šāda:

SELECT vērtība, RANK() OVER (PARTITION BY vērtība % 2 ORDER BY vērtība) AS rangs
NO (
VĒRTĪBAS (10), (20), (5), (15), (10)
) AS dati(vērtība);

PostgreSQL Rank() funkcijas piemērs ar nodalījumu pēc klauzulas

Apsveriet šādu piemēru:

SELECT vērtība, RANK() OVER (PARTITION BY vērtība % 2 ORDER BY vērtība) AS rangs
NO (
VĒRTĪBAS (10), (20), (5), (15), (10)
) AS dati(vērtība);

Šajā piemērā mēs pievienojām klauzulu PARTITION BY ar izteiksmi, kas pārbauda, ​​vai vērtība ir pāra vai nepāra skaitlis. Tam vajadzētu efektīvi sagrupēt vērtības divos nodalījumos: vienā pāra skaitļiem (kur atlikums ir 0) un otrs nepāra skaitļiem (kur atlikums ir 1).

Iegūtais komplekts ir šāds:

PostgreSQL Rank() funkcijas piemērs, apvienojot vairākus SQL līdzekļus

Varat arī izveidot sarežģītākus vaicājumus, izmantojot funkciju rank(). Piemēram, ņemiet Pagila datu bāzi. Pieņemsim, ka mēs vēlamies iegūt piecus labākos klientus, pamatojoties uz viņu kopējiem īres maksājumiem, un piešķirt tiem rangus.

Mēs varam izmantot funkciju rank (), kā parādīts šajā vaicājumā:

SELECT klienta_id, vārds, uzvārds, kopējie_maksājumi,
RANK() OVER (ORDER BY total_payments DESC) AS rangs
NO (
ATLASĪT c.customer_id, c.first_name, c.last_name, SUM(p.summa) AS total_payments
NO klienta c
PIEVIENOTIES maksājumam p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS klients_maksājumi
SECINĀJUMS PĒC ranga
IEROBEŽOTS 10;

Šajā piemērā mēs atlasām klienta_id, vārds_vārds, uzvārds, kopējais_maksājums un piešķirtais rangs(). Pēc tam mēs izmantojam funkciju rank(), lai katram klientam piešķirtu rangu, pamatojoties uz total_payment, kas ir sakārtots dilstošā secībā.

Iekšējais apakšvaicājums ļauj mums aprēķināt kopējos maksājumus katram klientam, savienojot klientu un maksājumu tabulas. Pēc tam mēs sagrupējam rezultātu, pamatojoties uz slejām customer_id, first_name un last_name, lai iegūtu katra klienta maksājumu summu.

Visbeidzot, ārējā vaicājumā mēs izmantojam funkciju rank() virs rezultātu kopas un sakārtojam to pēc total_payments augošā secībā. Mēs arī iekļaujam ierobežojuma klauzulu, lai iegūtu tikai 10 labākās rindas.

Kā redzat, varat ģenerēt vairāk ieskatu, apvienojot vairākas SQL funkcijas, piemēram, kārtošanu, filtrēšanu, apkopojumus, savienojumus un daudz ko citu.

Secinājums

Mēs izpētījām, kā mēs varam strādāt ar rank() funkciju PostgreSQL, lai iegūtu noteiktas rindas rangu no rezultātu kopas, pamatojoties uz definētajiem nosacījumiem. Mēs arī apskatījām, kā apvienot funkciju rank () ar citiem SQL rīkiem, lai izveidotu sarežģītākus vaicājumus.