logo

Функција РАНК у СКЛ Серверу

Функција РАНК у СКЛ Серверу је врста функције рангирања. Ова функција ће доделити број сваком реду унутар партиције излаза . Сваком реду додељује ранг као један плус ранг претходног реда. Када функција РАНК пронађе две вредности које су идентичне унутар исте партиције, она им додељује исти број ранга. Поред тога, следећи број у рангирању биће претходни ранг плус дуплирани бројеви. Стога, ова функција не додељује увек рангирање редова узастопним редоследом.

јава туториал

Функција РАНК је такође део прозорских функција. Приликом коришћења ове функције треба запамтити следеће тачке :

  • Увек ради са клаузулом ОВЕР().
  • Додељује ранг сваком реду на основу ОРДЕР БИ клаузуле.
  • Додељује ранг сваком реду узастопним редоследом.
  • Увек додељује ранг редовима, почевши од једног за сваку нову партицију.

НАПОМЕНА: Ранг додељује привремене вредности за редове унутар партиције када се упит изврши.

СКЛ Сервер обезбеђује следеће функције рангирања :

  • РАНК()
  • РОВ_НУМБЕР()
  • ДЕНСЕ_РАНК()
  • НТИЛЕ()

Хајде да детаљно научимо сваку функцију ранга. Прво ћемо направити табелу за демонстрацију свих ових функција. Следећи искази креирају табелу под називом ранк_демо са три колоне:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

Затим ћемо уметнути неке редове у ову табелу као у наставку:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

Можемо да верификујемо табелу помоћу наредбе СЕЛЕЦТ. Приказује доњи излаз:

Функција РАНК у СКЛ Серверу

Функција РАНК().

Ова функција се користи за одређивање ранга за сваки ред у скупу резултата. Следећа синтакса илуструје употребу РАНК функције у СКЛ Серверу:

 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

У овој синтакси,

сорт арраилист
  • Тхе ОВЕР клаузула поставља партиционисање и редослед резултата пре него што се примени повезана функција прозора.
  • Тхе ПАРТИТИОН БИ клаузула дели излаз који производи клаузула ФРОМ на партицију. Затим се функција примењује на сваку партицију и поново иницијализује када граница поделе пређе партиције. Ако нисмо дефинисали ову клаузулу, функција ће третирати све редове као једну партицију.
  • Тхе ОРДЕР БИ је обавезна клаузула која одређује редослед редова у опадајућем или растућем начину на основу једног или више назива колона пре него што се функција примени.

Пример

Хајде да видимо како функција РАНК() функционише у СКЛ Серверу. Наредба у наставку ће користити функцију рангирања за додељивање нумерације за сваки ред:

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

Пошто нисмо користили ПАРТИТИОН БИ клаузула , функција је третирала цео резултат као једну партицију. Извршавање наредбе ће приказати доњи излаз:

Функција РАНК у СКЛ Серверу

У овом излазу можемо видети да неки од редова добијају исти ранг јер имају исту вредност у градска колона . А следећи број у рангирању биће његов претходни ранг плус број дупликата.

Следећа изјава је други пример где ћемо користити клаузулу партиције по која ће поделити редове на основу град колону и доделите ранг сваком реду унутар партиције. Редослед излаза је заснован на име :

 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

Приказаће следећи излаз:

Функција РАНК у СКЛ Серверу

РОВ_НУМБЕР() Функција

Ова функција се користи за врати јединствени редни број за сваки ред у оквиру своје партиције. Нумерисање редова почиње од један и повећава се за један док се не достигне укупан број редова партиције. Вратиће различите рангове за ред који има сличне вредности које га чине различитим од функције РАНК().

Синтакса у наставку илуструје употребу функције РОВ_НУМБЕР() у СКЛ Серверу:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Пример

Извршите следећи упит да доделите редни број за сваки ред:

име посебних знакова
 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Он ће доделити ранг за табелу према њиховом град . Овде можемо видети да додељује различите рангове за ред који има исте вредности града.

Функција РАНК у СКЛ Серверу

Ако променимо редослед сортирања од узлазно до силазно са ОРДЕР БИ клаузулом, ова функција ће такође променити РАНК у складу са тим. Погледајте изјаву у наставку:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

Ево резултата:

Функција РАНК у СКЛ Серверу

Функција ДЕНСЕ_РАНК().

Ова функција додељује јединствени ранг за сваки ред унутар партиције према наведеној вредности колоне без икаквих празнина. Увек одређује рангирање узастопним редоследом. Ако добијемо а дупликат вредности , ова функција ће му доделити исти ранг, а следећи ранг је следећи редни број. Ова карактеристика разликује функцију ДЕНСЕ_РАНК() од функције РАНК().

маркдовн ундерлине

Синтакса у наставку илуструје употребу функције ДЕНСЕ_РАНК() у СКЛ Серверу:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Пример

Следећи упит користи функцију ДЕНСЕ_РАНК() да додели број ранга за сваки ред:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Вратиће доњи излаз где можемо видети да дуплиране вредности имају исти ранг, а следећи ранг ће бити следећи редни број.

Функција РАНК у СКЛ Серверу

То је још један пример функције ДЕНСЕ_РАНК() помоћу клаузуле ПАРТИТИОН БИ. Ова клаузула ће поделити редове на основу колоне града, а редослед скупа резултата је заснован на имену:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

Добићемо доњи излаз јер нема два иста имена. У овом случају, излаз је сличан функцији РАНК().

Функција РАНК у СКЛ Серверу

Ажурирајмо име следећим упитом:

 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

Сада поново извршите исти упит. Видећемо да је ова табела добила исто име Цалифорниа Цити . Дакле, ранг је такође исти за оба имена.

Функција РАНК у СКЛ Серверу

НТИЛЕ(Н) функција

Ова функција се користи за распоредите редове уређене партиције на унапред дефинисани број (Н) приближно једнаких група. Свака група редова добија свој ранг на основу дефинисаног услова и почиње нумерисање од једне групе. Додељује а број канте за сваки ред у групи који представља групу којој припада.

систем.оут.принтлн

Следећа синтакса илуструје употребу функције НТИЛЕ() у СКЛ Серверу:

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Пример

Следећи упит користи функцију НТИЛЕ() да додели број ранга за сваки ред:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Наведена табела има осам записа . Стога НТИЛЕ(3) говори да скуп резултата мора имати а група од три записа . Извршавање наредбе ће приказати доњи излаз:

Функција РАНК у СКЛ Серверу

Овај чланак ће објаснити све РАНК функције које се користе у СКЛ Серверу са различитим примерима. Такође показује главне разлике између ових функција. Ове функције су веома корисне за програмере за истраживање и добро управљање својим подацима.