logo

Номер на ред на SQL Server

Номерът на реда е най-често срещаният функция за класиране използвани в SQL Server. Функцията ROW_NUMBER(). генерира пореден номер за всеки ред в дял в резултантния изход. Във всеки дял номерът на първия ред започва с 1. Винаги трябва да използваме ПОДРЕДЕНИ ПО клауза, за да се гарантира, че номерата са присвоени в правилната последователност. Стойностите, върнати от тази функция, са от ГОЛЯМ ВЪТ тип данни. Тази функция идва с SQL Server 2005 и по-нови версии на MS SQL.

ROW_NUMBER определя временна стойност когато заявката се изпълни. Ако искате да получите числата в таблица, трябва да видите ИДЕНТИЧНОСТ собственост и ПОСЛЕДОВАТЕЛНОСТ . Когато функцията ROW_NUMBER в SQL Server срещне две еднакви стойности в един и същи дял, тя им присвоява различни номера на ранг. Номерът на ранга ще бъде определен от реда, в който са показани.

Няма гаранция, че стойността, върната от тази функция, ще бъде подредена еднакво за всяко изпълнение, освен ако не е вярно следното:

  • Стойностите на разделени колони са уникални
  • Стойностите на колоните ORDER BY са уникални
  • Комбинацията от колони Partition и Order By е уникална

Синтаксис

По-долу е синтаксисът, който илюстрира функцията ROW_NUMBER():

 ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... ) 

Нека разберем синтаксиса на функцията ROW NUMBER():

НАД

Важно е да разберете тази клауза, която указва прозореца или набора от редове, с които работи функцията прозорец. PARTITION BY и ORDER BY са двете възможни клаузи на клаузата OVER. Изразът ORDER BY на клаузата OVER се поддържа, когато редовете трябва да идват в определен ред, за да може функцията да се изпълни.

РАЗДЕЛЕНИЕ ПО

пример за подниз в java
  • Това е незадължителна клауза, която разделя резултатния набор на дялове (групи от редове). След това функцията ROW NUMBER() се прилага към всеки дял и присвоява ранговия номер на всеки дял поотделно.
  • Ако пропуснем клаузата за разделяне по, функцията ROW_NUMBER ще третира целия резултат като един дял и ще осигури класиране в реда отгоре надолу.

ПОДРЕДЕНИ ПО

Тази клауза ни позволява да сортираме редовете на набора от резултати във всеки дял. Това е задължителна клауза, тъй като функцията ROW_NUMBER() зависи от реда.

Пример

Нека разберем как работи функцията ROW_NUMBER в таблицата на SQL Server с пример. Първо ще създадем таблица с име ' Лица ' използвайки израза по-долу:

 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); 

След това проверете данните с помощта на ИЗБЕРЕТЕ изявление. Ще получим изхода по-долу:

Номер на ред на SQL Server

1. Прост ROW_NUMBER() пример

Следното твърдение показва подробности за лицето и добавя последователно цяло число към всеки ред с помощта на ROW_NUMBER():

 SELECT *, ROW_NUMBER() OVER (ORDER BY price) AS row_num FROM Persons; 

Тук не сме посочили клаузата PARTITION BY, така че функцията ROW_NUMBER() да третира целия набор от резултати като един дял. След изпълнение на оператора ще получим следния изход:

Номер на ред на SQL Server

2. ROW_NUMBER() над пример за дялове

Функцията ROW NUMBER() се използва в този пример и предоставя пореден номер на всеки запис в дял в таблица. Винаги реинициализира номера на реда, когато годината се промени:

enum към низ java
 SELECT person_name, product, price, years, ROW_NUMBER() OVER ( PARTITION BY years ORDER BY price) AS row_num FROM Persons; 

Тук сме използвали клаузата PARTITION BY, която разделя 'Лица' таблица на дялове въз основа на 'години' колона. След изпълнение ще получим изхода по-долу:

Номер на ред на SQL Server

3. ROW_NUMBER() Пример за страниране

Можем също да използваме функцията ROW_NUMBER() за пагинация. Например , ако искаме да получим цялата информация за дадено лице в приложение по страници, първо ще присвоим на всеки ред пореден номер с помощта на функцията ROW_NUMBER(). Второ, сортирайте редовете по исканата страница.

Следното твърдение го обяснява по-ясно:

 SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY price) AS row_num, person_name, product, price FROM Persons) P WHERE row_num &gt; 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 &gt; 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></=>