Postgres Rank

Postgres Rank



Sa PostgreSQL, ang rank() function ay isang Window function na nagbibigay-daan sa amin na magtalaga ng ranggo sa bawat row sa loob ng set ng resulta batay sa isang ibinigay na pamantayan sa pag-uuri. Tulad ng karamihan sa mga function ng window, ang rank function ay kapaki-pakinabang sa mga analytical na query tulad ng pagtukoy sa ranggo ng isang row na nauugnay sa iba sa isang ibinigay na set ng resulta.

Sinasaliksik ng tutorial na ito kung paano magtrabaho kasama ang mga function ng PostgreSQL. Ginalugad din namin ang function syntax at mga parameter at tumitingin sa ilang praktikal na halimbawa.

PostgreSQL Rank() Function

Ipinapakita ng sumusunod ang syntax ng rank() function sa PostgreSQL:







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

Magsisimula tayo sa pamamagitan ng pagtawag sa rank() function. Pagkatapos ay gagamitin namin ang OVER na keyword upang ipahiwatig na nais naming magsagawa ng pagpapatakbo ng window function.



Susunod ay ang PARTITION BY partition_expression. Hinahati ng sugnay na ito ang mga hilera sa iba't ibang partisyon batay sa isang naibigay na expression. Ang ranggo ay ginagawa nang nakapag-iisa sa bawat partition kung saan ang rank integer value ay nagsisimula sa 1 para sa bawat bagong partition.



Sa wakas, mayroon kaming ORDER BY clause na tumutukoy sa column o expression na tumutukoy sa row order.





Halimbawa ng Function ng PostgreSQL Rank().

Ang sumusunod na query ay nagpapakita ng isang pangunahing halimbawa ng paggamit ng PostgreSQL's rank() function:

PUMILI ng halaga, RANK() OVER (ORDER BY value) BILANG ranggo
MULA sa (
MGA HALAGA (10), (20), (5), (15), (10)
) AS data(halaga);

Sa halimbawang ito, niraranggo namin ang mga halaga batay sa kanilang pataas na pagkakasunud-sunod. Ang dalawang paglitaw ng halaga ay itinalaga na may parehong ranggo dahil magkapareho sila at lumilitaw sa parehong posisyon sa loob ng pagkakasunud-sunod.



Ang resultang talahanayan ay ang mga sumusunod:

PUMILI ng halaga, RANK() OVER (PARTITION BY value % 2 ORDER BY value) BILANG ranggo
MULA sa (
MGA HALAGA (10), (20), (5), (15), (10)
) AS data(halaga);

Halimbawa ng Function ng PostgreSQL Rank() kasama ang Partition By Clause

Isaalang-alang ang sumusunod na halimbawa:

PUMILI ng halaga, RANK() OVER (PARTITION BY value % 2 ORDER BY value) BILANG ranggo
MULA sa (
MGA HALAGA (10), (20), (5), (15), (10)
) AS data(halaga);

Sa halimbawang ito, idinagdag namin ang PARTITION BY clause na may expression na nagsusuri kung ang value ay even o odd na numero. Ito ay dapat na epektibong pagpangkatin ang mga halaga sa dalawang partisyon: ang isa para sa kahit na mga numero (kung saan ang natitira ay 0) at ang isa pa para sa mga kakaibang numero (kung saan ang natitira ay 1).

Ang resultang set ay ang mga sumusunod:

Halimbawa ng Function ng PostgreSQL Rank() sa pamamagitan ng Pagsasama-sama ng Maramihang Mga Tampok ng SQL

Maaari ka ring lumikha ng mas kumplikadong mga query gamit ang rank() function. Halimbawa, kunin ang database ng Pagila. Ipagpalagay na gusto naming kunin ang nangungunang limang customer batay sa kanilang kabuuang bayad sa pagrenta at magtalaga ng mga ranggo sa kanila.

Maaari naming gamitin ang rank() function tulad ng ipinapakita sa sumusunod na query:

PUMILI ng customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) BILANG ranggo
MULA sa (
PUMILI c.customer_id, c.first_name, c.last_name, SUM(p.amount) BILANG kabuuang_mga pagbabayad
MULA sa kostumer c
SUMALI sa pagbabayad p SA c.customer_id = p.customer_id
GROUP NG c.customer_id, c.first_name, c.last_name
) BILANG customer_payments
ORDER BY rank
LIMIT 10;

Sa halimbawang ito, pipiliin namin ang customer_id, first_name, last_name, total_payment, at ang nakatalagang ranggo(). Pagkatapos, ginagamit namin ang rank() function upang magtalaga ng ranggo sa bawat customer batay sa kabuuang_bayad na pinagsunod-sunod sa pababang pagkakasunud-sunod.

Ang panloob na subquery ay nagpapahintulot sa amin na kalkulahin ang kabuuang mga pagbabayad para sa bawat customer sa pamamagitan ng pagsali sa customer at mga talahanayan ng pagbabayad. Pagkatapos ay ipinangkat namin ang resulta batay sa customer_id, first_name, at last_name na mga column upang makuha ang kabuuan ng mga pagbabayad para sa bawat customer.

Panghuli, sa panlabas na query, inilalapat namin ang rank() function sa set ng resulta at inayos ito sa pamamagitan ng total_payments sa pataas na pagkakasunud-sunod. Isinasama rin namin ang sugnay ng limitasyon upang makuha lang ang nangungunang 10 row.

Gaya ng nakikita mo, makakabuo ka ng higit na insightful na data sa pamamagitan ng pagsasama-sama ng maraming feature ng SQL gaya ng pag-uuri, pag-filter, pagsasama-sama, pagsali, at higit pa.

Konklusyon

Ginalugad namin kung paano namin magagawa ang rank() function sa PostgreSQL para kunin ang ranggo ng isang row mula sa isang set ng resulta batay sa tinukoy na mga kundisyon. Sinasaklaw din namin kung paano pagsamahin ang rank() function sa iba pang mga tool sa SQL upang lumikha ng mas kumplikadong mga query.