De rijnummerfunctie is een van de vensterfuncties die worden gebruikt voor het toewijzen van het rijnummer aan de rijen in elk van de partities in de volgorde waarin ze in de partitie zijn gesorteerd met behulp van de PARTITIE clausule, PARTITIE alleen de VOLGORDE De clausule kan binnen de OVER-clausule worden gebruikt, in dat geval wordt de hele tabel als één partitie beschouwd. Maar de ORDER BY-clausule is verplicht voor het gebruik van de RIJ NUMMER() functie omdat het de rijen in de partities in die logische volgorde rangschikt en later de functie ROW_NUMBER() het rijnummer kan toewijzen. In elke partitie begint het rijnummer vanaf 1.
Syntaxis:
RIJ NUMMER ( )
OVER ( [ PARTITIE DOOR col_1,col_2… ] ORDER BY col_3,col_4.. ASC of DESC) AS kolomnaam
Componenten van de functie ROW_NUMBER().
- PARTITIE DOOR: Dit is de belangrijkste subclausule die de rijen in vensters verdeelt en voor elke rij de waarden van raam functies toegepast, wordt berekend.
- BESTEL DOOR: Dit wordt gebruikt om de rijen in de partitie te ordenen; standaard is dit de oplopende volgorde. Zonder de ORDER BY-clausule werkt de functie ROW_NUMBER() niet.
- Retourtype: Het retourtype van de functie ROW_NUMBER() is BIGINT.
Gebruik van de functie ROW_NUMBER().
Stap 1: Maak de database Geeksforgeeks met behulp van de volgende SQL-query:
Vraag
CREATE DATABASE Geeksforgeeks>
Gebruik de GFG-database.
Vraag
USE techcodeview.com>
Stap 3: Maak een tabel met de leerlingen van verschillende secties met hun totaalscore op 500.
Vraag
CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT );>
Stap 4: Voeg de rijen in de tabel in:
Vraag
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);>
Stap 5: Controleer de tabel
SELECT * FROM studentsSectionWise>
Uitgang:

studentenSectionWise tafel
ubuntu build-essentials
ORDER_BY-clausule gebruiken met de functie ROW_NUMBER().
Als u eenvoudigweg de ORDER BY-clausule met oplopend of aflopend gebruikt, wordt de hele tabel als slechts één partitie beschouwd.
Laten we het rankNumber van de studenten controleren met behulp van de functie ROW_NUMBER() met de ORDER BY-clausule inclusief alle secties:
SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Uitleg: In de query hebben we de ORDER BY-clausule gebruikt met de studentenMarks, die is geordend in DESC-volgorde.
Uitgang:

Uitvoer
Uitleg: In het resultaat kunnen we zien dat de hele tabel als een enkele partitie wordt beschouwd en dat het rangnummer in oplopende volgorde staat, terwijl de studentenMarks in aflopende volgorde staan.
PARTITION_BY gebruiken met de functie ROW_NUMBER().
Door eenvoudigweg de PARTITION BY-clausule te gebruiken, wordt de tabel in verschillende partities verdeeld op basis van de kolomnaam en vervolgens de ORDER BY-clausule met oplopend of aflopend, wordt de hele tabel als slechts één partitie beschouwd. En dan functioneert de ROW_NUMBER() elk uniek nummer beginnend bij 1 in elke partitie.
Laten we de rangschikkingssectie eens controleren met behulp van de functie ROW_NUMBER() met de clausules PARTITION BY en ORDER BY.
SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>
Uitleg: In de query die we hebben gebruikt PARTITION BY-clausule om de tabel te verdelen in de sectionName wise en ORDER BY-clausule met de studentenMarks die is geordend in DESC.
Uitgang:

Uitvoer
Uitleg: In het resultaat kunnen we zien dat we partities hebben die zijn gedeeld door de sectieName en vervolgens worden in elke partitie de studenten geordend op basis van studentmarks in de DESC-volgorde. De functie ROW_NUMBER() heeft het rijnummer toegewezen vanaf elke partitie en wordt verhoogd .
ROW_NUMBER() begrijpen zonder PARTITION BY
De functie ROW_NUMBER() van SQL Server is een flexibel hulpmiddel waarmee u elke rij in een resultatenset een uniek rijnummer kunt geven. Het is net zo effectief als het wordt gebruikt zonder de PARTITION BY-clausule, ook al wordt het vaak in combinatie ermee gebruikt voor het groeperen en rangschikken binnen partities. De mogelijkheden en toepassingen van ROW_NUMBER() zonder de PARTITION BY-clausule worden in dit artikel besproken.
Syntaxis:
SELECTEER
ROW_NUMBER() OVER ( BESTEL DOOR UwBestellingPerKolom) ALS RijNum,
OverigeKolommen
VAN
UwTabelnaam;
Laten we de rangschikkingssectie eens controleren met behulp van de functie ROW_NUMBER() zonder de clausules PARTITION BY en ORDER BY.
SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
Uitgang:

Uitvoer
ROW_NUMBER() gebruiken om de subset van rijen op te halen
De functie ROW_NUMBER() kan worden gebruikt om de subset van rijen uit de tabel op te halen met behulp van de CTE, wat handig kan zijn in het geval van paginering van de gegevens.
Laten we de top 2 ranglijsten van elke klasse bekijken met behulp van de CTE (gemeenschappelijke tabelexpressie) met ROW_NUMBER() functie:
WITH topTwoRankers AS ( SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise ) SELECT * FROM topTwoRankers WHERE rankNumber <=2;>
Uitleg: Hier in de query hebben we de CTE-expressie gebruikt om de tijdelijke tabel op te halen uit de hierboven gebruikte query en we hebben de buitenste SELCT-query gebruikt om de studenten te krijgen wiens rangnummer kleiner is dan of gelijk is aan 2.
Uitgang:

Uitvoer
Uitleg: In het resultaat kunnen we zien dat we de twee beste ranglijsten van elke sectie hebben. Dit is de subset van de tabel die is verkregen uit de zoekopdracht uit het vorige voorbeeld.
Voordelen vanROW_NUMBER()>
Met PARTITIE DOOR
- Maakt geavanceerde partitierangschikking mogelijk.
- Maakt unieke rijnummering binnen specifieke groepen mogelijk.
- Zorgt voor meer flexibiliteit in omstandigheden waarbij uitgebreide analyses betrokken zijn.
Voordelen vanROW_NUMBER()>
Zonder PARTITIE DOOR
- Duidelijk en eenvoudig.
- maakt het eenvoudig om items te rangschikken volgens een bepaalde kolom.
- Kan betere prestaties bieden, vooral voor kleinere resultatensets.
Conclusie
Het is erg handig als we de volgorde op basis van partities willen hebben en de noodzakelijke bewerkingen willen uitvoeren. Gebruik makend van ORDER BY-clausule is verplicht tijdens het gebruik van de functie ROW_NUMBER(). Ook kunnen we met behulp van de CTE de subsets van de tabel uit de bestelde partities halen. Het belangrijkste gebruiksscenario van ROW_NUMBER() is het rangschikken van de rijen op basis van verschillende partities, wat erg handig is voor gegevensanalysedoeleinden.