Постгрес Ранк

Postgres Rank



У ПостгреСКЛ-у, функција ранк() је функција прозора која нам омогућава да доделимо ранг сваком реду у оквиру скупа резултата на основу датих критеријума сортирања. Као и већина прозорских функција, функција ранга је корисна у аналитичким упитима као што је одређивање ранга реда који је релативан у односу на друге у датом скупу резултата.

Овај водич истражује како да радите са ПостгреСКЛ функцијама. Такође истражујемо синтаксу и параметре функције и погледамо неке практичне примере.

Функција ПостгреСКЛ Ранк().

У наставку је приказана синтакса функције ранк() у ПостгреСКЛ-у:







РАНК() ПРЕКО (ПАРТИТИОН БИ партитион_екпрессион ОРДЕР БИ сорт_екпрессион [АСЦ|ДЕСЦ])

Почињемо позивањем функције ранк(). Затим користимо кључну реч ОВЕР да означимо да желимо да извршимо операцију функције прозора.



Следеће је ПАРТИТИОН БИ партитион_екпрессион. Ова клаузула дели редове на различите партиције на основу датог израза. Рангирање се врши независно у свакој партицији где целобројна вредност ранга почиње од 1 за сваку нову партицију.



Коначно, имамо клаузулу ОРДЕР БИ која специфицира колону или израз који одређује редослед редова.





Пример функције ПостгреСКЛ Ранк().

Следећи упит показује основни пример коришћења ПостгреСКЛ функције ранк():

СЕЛЕЦТ вредност, РАНК() ОВЕР (ОРДЕР БИ валуе) АС ранг
ИЗ (
ВРЕДНОСТИ (10), (20), (5), (15), (10)
) АС подаци(вредност);

У овом примеру рангирамо вредности на основу њиховог растућег редоследа. Два појављивања вредности се додељују истим рангом јер су слична и појављују се на истој позицији унутар налога.



Добијена табела је следећа:

СЕЛЕЦТ вредност, РАНК() ОВЕР (ПАРТИТИОН БИ валуе % 2 ОРДЕР БИ валуе) КАО ранг
ИЗ (
ВРЕДНОСТИ (10), (20), (5), (15), (10)
) АС подаци(вредност);

Пример функције ПостгреСКЛ Ранк() са клаузулом Партитион Би

Размотрите следећи пример:

СЕЛЕЦТ вредност, РАНК() ОВЕР (ПАРТИТИОН БИ валуе % 2 ОРДЕР БИ валуе) КАО ранг
ИЗ (
ВРЕДНОСТИ (10), (20), (5), (15), (10)
) АС подаци(вредност);

У овом примеру смо додали клаузулу ПАРТИТИОН БИ са изразом који проверава да ли је вредност паран или непаран број. Ово би ефективно требало да групише вредности у две партиције: једну за парне бројеве (где је остатак 0) и другу за непарне бројеве (где је остатак 1).

Добијени скуп је следећи:

Пример функције ПостгреСКЛ Ранк() комбиновањем више СКЛ функција

Такође можете креирати сложеније упите помоћу функције ранк(). На пример, узмите Пагила базу података. Претпоставимо да желимо да добијемо првих пет купаца на основу њихових укупних плаћања закупнине и да им доделимо рангове.

Можемо користити функцију ранк() као што је приказано у следећем упиту:

СЕЛЕЦТ цустомер_ид, фирст_наме, ласт_наме, тотал_паиментс,
РАНК() ПРЕКО (ОРДЕР БИ тотал_паиментс ДЕСЦ) КАО ранг
ИЗ (
СЕЛЕЦТ ц.цустомер_ид, ц.фирст_наме, ц.ласт_наме, СУМ(п.амоунт) АС тотал_паиментс
ОД купца ц
ПРИДРУЖИТЕ се плаћању п ОН ц.цустомер_ид = п.цустомер_ид
ГРОУП БИ ц.цустомер_ид, ц.фирст_наме, ц.ласт_наме
) АС цустомер_паиментс
РЕД ПО рангу
ЛИМИТ 10;

У овом примеру бирамо цустомер_ид, фирст_наме, ласт_наме, тотал_паимент и додељени ранг(). Затим користимо функцију ранк() да доделимо ранг сваком купцу на основу тотал_паимента који је сортиран у опадајућем редоследу.

Унутрашњи потупит нам омогућава да израчунамо укупна плаћања за сваког купца спајањем табела купаца и плаћања. Затим групишемо резултат на основу колона цустомер_ид, фирст_наме и ласт_наме да бисмо добили збир уплата за сваког купца.

Коначно, у спољашњем упиту примењујемо функцију ранк() на скуп резултата и поредамо га према тотал_паиментс у растућем редоследу. Такође укључујемо клаузулу ограничења за преузимање само првих 10 редова.

Као што видите, можете да генеришете проницљивије податке комбиновањем више СКЛ функција као што су сортирање, филтрирање, агрегати, спајања и још много тога.

Закључак

Истражили смо како можемо да радимо са функцијом ранк() у ПостгреСКЛ-у да бисмо дохватили ранг датог реда из скупа резултата на основу дефинисаних услова. Такође смо покрили како да комбинујемо функцију ранк() са другим СКЛ алатима да бисмо креирали сложеније упите.