Број реда је најчешћи функција рангирања користи се у СКЛ Серверу. Функција РОВ_НУМБЕР(). генерише редни број за сваки ред унутар партиције у резултујућем излазу. У свакој партицији, број у првом реду почиње са 1. Увек морамо користити ОРДЕР БИ клаузулу како би се осигурало да су бројеви додељени у правилном редоследу. Вредности које враћа ова функција су од БИГ ИНТ тип података. Ова функција долази са СКЛ Сервер 2005 и новијим верзијама МС СКЛ-а.
РОВ_НУМБЕР одређује привремена вредност када се упит изврши. Ако желите да добијете бројеве у табели, морате да видите ИДЕНТИТЕТ имовине и НИЗ . Када функција РОВ_НУМБЕР у СКЛ Серверу наиђе на две идентичне вредности у истој партицији, она им додељује различите бројеве ранга. Број ранга ће бити одређен редоследом којим су приказани.
Не постоји гаранција да ће вредност коју враћа ова функција бити иста за свако извршење осим ако није тачно следеће:
- Вредности партиционираних колона су јединствене
- Вредности ОРДЕР БИ колона су јединствене
- Комбинација колона Партитион и Ордер Би је јединствена
Синтакса
Следеће је синтакса која илуструје функцију РОВ_НУМБЕР():
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
Хајде да разумемо синтаксу функције РОВ НУМБЕР():
ПРЕКО
Важно је разумети ову клаузулу која специфицира прозор или скуп редова којима функција прозора ради. ПАРТИТИОН БИ и ОРДЕР БИ су две могуће клаузуле клаузуле ОВЕР. Израз ОРДЕР БИ клаузуле ОВЕР је подржан када редови морају да буду у одређеном редоследу да би се функција извршила.
андроид процес ацоре стално стаје
ПАРТИТИОН БИ
- То је опциона клаузула која дели скуп резултата на партиције (групе редова). Затим се функција БРОЈ РЕДОВА() примењује на сваку партицију и додељује ранг сваке партиције посебно.
- Ако изоставимо партицију по клаузули, функција РОВ_НУМБЕР ће третирати цео резултат као једну партицију и обезбедити рангирање од врха до дна.
ОРДЕР БИ
Ова клаузула нам омогућава да сортирамо редове скупа резултата унутар сваке партиције. То је обавезна клаузула јер функција РОВ_НУМБЕР() зависи од редоследа.
Пример
Хајде да разумемо како функција РОВ_НУМБЕР функционише у табели СКЛ Сервера са примером. Прво ћемо креирати табелу под називом ' Лица ' користећи следећу изјаву:
CREATE TABLE Persons ( person_name varchar(45) NOT NULL, product varchar(45) DEFAULT NULL, country varchar(25) DEFAULT NULL, price float, years int NOT NULL );
Затим ћемо додати неке записе у ову табелу користећи следећу изјаву:
INSERT INTO Persons (person_name, product, country, price, years) VALUES ('Steffen', 'Computer', 'USA', 20000.00, 2018), ('Joseph', 'Laptop', 'India', 35000.00, 2016), ('Kevin', 'TV', 'USA', 15000.00, 2016), ('Thompson', 'Mobile', 'France', 12500.00, 2017), ('Donald', 'Laptop', 'England', 30000.00, 2018), ('Joseph', 'Mobile', 'India', 18000.00, 2018), ('Matthew', 'Desktop', 'France', 22000.00, 2017), ('Antonio', 'Mouse', 'England', 1200.00, 2016);
Затим проверите податке помоћу СЕЛЕЦТ изјава. Добићемо доњи излаз:
сортирање уметањем у јава
1. Једноставан пример РОВ_НУМБЕР().
Следећа изјава приказује детаље о особи и додаје узастопни цео број у сваки ред користећи РОВ_НУМБЕР():
SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons;
Овде нисмо навели клаузулу ПАРТИТИОН БИ тако да ће функција РОВ_НУМБЕР() третирати цео скуп резултата као једну партицију. Након извршења наредбе, добићемо следећи излаз:
2. РОВ_НУМБЕР() преко примера партиција
Функција РОВ НУМБЕР() која се користи у овом примеру даје редни број сваком запису унутар партиције у табели. Увек је поново иницијализовао број реда када се година промени:
SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons;
Овде смо користили клаузулу ПАРТИТИОН БИ која дели 'особе' табелу на партиције на основу 'године' колона. Након извршења, добићемо следећи излаз:
3. РОВ_НУМБЕР() Пример за пагинацију
намера намера
Такође можемо да користимо функцију РОВ_НУМБЕР() за пагинацију. На пример , ако желимо да добијемо све информације о особи у апликацији по страницама, прво ћемо сваком реду доделити редни број помоћу функције РОВ_НУМБЕР(). Друго, сортирајте редове према траженој страници.
Следећа изјава то јасније објашњава:
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num > 3 AND row_num <= 6; < pre> <p>It will give the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-4.webp" alt="SQL Server Row Number"> <p>If we do not want to use the <strong>subquery</strong> , we can use the <strong>common table expression (CTE)</strong> as below statement:</p> <pre> WITH CTE_Person AS ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) SELECT * FROM CTE_Person WHERE row_num > 3 AND row_num <= 6; < pre> <p>In this example, we have first specified the CTE that uses the ROW_NUMBER() function to assign each row in the result set sequentially. Second, the outer query returned the desired result. After execution, we will get the following output:</p> <img src="//techcodeview.com/img/sql-server-tutorials/96/sql-server-row-number-5.webp" alt="SQL Server Row Number"> <h3>Conclusion</h3> <p>In this article, we learned how to give a sequential number to each record within a partition of a query using the ROW NUMBER() function in SQL Server.</p> <hr></=></pre></=>=>