Funcția de număr de rând este una dintre funcțiile ferestrei utilizate pentru atribuirea numărului de rând rândurilor din fiecare dintre partiții în ordinea în care au fost sortate în partiție folosind PARTIȚIE clauza, PARTITION numai cel ORDIN clauza poate fi folosită în interiorul clauzei OVER în acest caz, întregul tabel va fi considerat ca o singură partiție. Dar clauza ORDER BY este obligatorie pentru utilizarea ROW_NUMBER() funcție deoarece aranjează rândurile în partiții în acea ordine logică, iar mai târziu funcția ROW_NUMBER() poate atribui numărul rândului. În fiecare partiție, numărul rândului începe de la 1.
Sintaxă:
ROW_NUMBER ( )
OVER ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC sau DESC) AS nume_coloană
Componentele funcției ROW_NUMBER().
- PARTIREA DE: Aceasta este sub-clauza principală care împarte rândurile în ferestre și pentru fiecare rând, valorile lui funcțiile ferestrei aplicate vor fi calculate.
- COMANDA PENTRU: Acesta este folosit pentru a ordona rândurile din partiție, implicit este ordinea crescătoare. Fără clauza ORDER BY, funcția ROW_NUMBER() nu funcționează.
- Tip de returnare: Tipul de returnare al funcției ROW_NUMBER() este BIGINT.
Utilizarea funcției ROW_NUMBER().
Pasul 1: Creați baza de date Geeksforgeeks utilizând următoarea interogare SQL:
Interogare
CREATE DATABASE Geeksforgeeks>
Utilizați baza de date GFG.
Interogare
USE techcodeview.com>
Pasul 3: Creați un tabel cu studenții din diferite secțiuni cu notele lor totale din 500.
Interogare
CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT );>
Pasul 4: Introduceți rândurile în tabel:
Interogare
INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368), (5, 'Geek15','C',295), (6, 'Geek16','C',495);>
Pasul 5: Verificați tabelul
SELECT * FROM studentsSectionWise>
Ieșire:

studentSectionWise tabel
mvc pentru java
Folosind clauza ORDER_BY cu funcția ROW_NUMBER().
Folosind pur și simplu clauza ORDER BY cu crescător sau descrescător consideră întregul tabel ca o singură partiție.
Să verificăm numărul de rang al studenților care utilizează funcția ROW_NUMBER() cu clauza ORDER BY care include toate secțiunile:
SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Explicaţie: În interogare am folosit clauza ORDER BY cu studentMarks care este ordonată în ordine DESC.
Ieșire:

Ieșire
Explicaţie: În rezultat, putem vedea că întregul tabel este considerat ca o singură partiție, iar numărul rankNumber este în ordine crescătoare cu studentMarks în ordine descrescătoare.
Se utilizează PARTITION_BY cu funcția ROW_NUMBER().
Folosind pur și simplu clauza PARTITION BY divdies și tabelul în diferite partiții bazate pe numele coloanei și apoi clauza ORDER BY cu ascendent sau descendent consideră întregul tabel ca o singură partiție. Și apoi ROW_NUMBER() funcționează fiecare număr unic începând de la 1 în fiecare partiție.
Să verificăm secțiunea de clasare folosind funcția ROW_NUMBER() cu clauzele PARTITION BY și ORDER BY.
SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>
Explicaţie: În interogarea pe care am folosit-o clauza PARTITION BY pentru a partiționa tabelul pe secțiunea Nume înțelept și clauza ORDER BY cu studentMarks care este ordonat în DESC.
Ieșire:

Ieșire
Explicaţie: În rezultat, putem vedea că avem partiții împărțite la secțiunea Nume și apoi în fiecare partiție studenții sunt ordonați pe baza notelor studentului în ordinea DESC, funcției ROW_NUMBER() i se atribuie numărul rândului începând de la fiecare partiție, cu acesta fiind incrementat. .
Înțelegerea ROW_NUMBER() fără PARTITION BY
Funcția ROW_NUMBER() a SQL Server este un instrument flexibil care vă permite să furnizați fiecărui rând dintr-un set de rezultate un număr unic de rând. Este la fel de eficient atunci când este folosit fără clauza PARTITION BY, chiar dacă este frecvent utilizat împreună cu aceasta pentru gruparea și clasarea în cadrul partițiilor. Posibilitățile și utilizările ROW_NUMBER() fără clauza PARTITION BY vor fi discutate în acest articol.
Sintaxă:
SELECTAȚI
ROW_NUMBER() PESTE ( COMANDA PENTRU YourOrderByColumn) LA FEL DE RowNum,
Alte coloane
DIN
YourTableName;
Să verificăm secțiunea de clasare folosind funcția ROW_NUMBER() fără clauzele PARTITION BY și ORDER BY.
SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Ieșire:

Ieșire
Folosind ROW_NUMBER() pentru a obține subsetul de rânduri
Funcția ROW_NUMBER() poate fi folosită pentru a obține subsetul de rânduri din tabel folosind CTE care poate fi util în cazul paginarii datelor.
Să verificăm primii 2 clasați din fiecare clasă folosind CTE (Expresie comună de tabel) cu funcția ROW_NUMBER() :
WITH topTwoRankers AS ( SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise ) SELECT * FROM topTwoRankers WHERE rankNumber <=2;>
Explicaţie: Aici, în interogare, am folosit expresia CTE pentru a obține tabelul temporar din interogarea folosită mai sus și am folosit interogarea SELCT exterioară pentru a obține studenții al căror rangNumăr este mai mic sau egal cu 2.
Ieșire:

Ieșire
Explicaţie: În rezultat putem vedea că avem primii 2 clasați din fiecare secțiune care sunt subsetul tabelului obținut din interogarea prezentată în exemplul anterior.
AvantajeleROW_NUMBER()>Cu PARTITION BY
- Permite clasarea avansată a partițiilor.
- Permite numerotarea unică a rândurilor în anumite grupuri.
- Permite o mai mare flexibilitate în circumstanțe care implică o analiză extinsă.
AvantajeleROW_NUMBER()>Fără PARTITION BY
- Simplu și simplu.
- simplifică clasarea articolelor în funcție de o anumită coloană.
- Poate oferi performanțe mai bune, în special pentru seturi mai mici de rezultate.
Concluzie
Este foarte util atunci când dorim să avem secvențierea pe bază de partiție și să facem operațiunile necesare. Folosind clauza ORDER BY este obligatoriu în timpul utilizării funcției ROW_NUMBER(). De asemenea, folosind CTE putem obține subseturile tabelului din partițiile ordonate. Principalul caz de utilizare al ROW_NUMBER() este clasarea rândurilor pe baza diferitelor partiții, ceea ce este foarte util în scopul analizei datelor.