De functie ROW_NUMBER() in MySQL wordt gebruikt om de volgnummer voor elke rij binnen zijn partitie. Het is een soort vensterfunctie. Het rijnummer begint bij 1 tot het aantal rijen dat aanwezig is in de partitie.
Opgemerkt moet worden dat MySQL de functie ROW_NUMBER() vóór versie 8.0 niet ondersteunt, maar ze bieden een sessievariabele waarmee we deze functie kunnen emuleren.
Syntaxis
Hieronder volgt de basissyntaxis waarin ROW_NUMBER() moet worden gebruikt MySQL :
hoe upgrade ik java
ROW_NUMBER() OVER ( )
Laten we het demonstreren aan de hand van een voorbeeld .
Eerst gaan we een tabel maken met de naam ' Persoon ' met behulp van de onderstaande verklaring:
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
Vervolgens is het vereist om waarden aan deze tabel toe te voegen. Voer de onderstaande instructie uit:
INSERT INTO Person(Name, Product, Country, Year) VALUES ('Stephen', 'Computer', 'USA', 2015), ('Joseph', 'Laptop', 'India', 2016), ('John', 'TV', 'USA', 2016), ('Donald', 'Laptop', 'England', 2015), ('Joseph', 'Mobile', 'India', 2015), ('Peter', 'Mouse', 'England', 2016);
Voer vervolgens de SELECT-instructie uit om de records weer te geven:
Kali Linux-terminal
mysql> SELECT * FROM Person;
We krijgen de uitvoer, zoals hieronder weergegeven:
wanneer begint q2
Nu kunnen we de functie ROW_NUMBER() gebruiken om aan elke record een volgnummer toe te wijzen met behulp van de onderstaande instructie:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Het geeft de volgende uitvoer:
Nogmaals, we kunnen de functie ROW_NUMBER() gebruiken om een volgnummer toe te wijzen aan elke record binnen een partitie met behulp van de onderstaande instructie:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Het geeft de onderstaande uitvoer, waarbij twee partities worden gevonden op basis van het jaar (2015 en 2016).
nump uniek
MySQL ROW_NUMBER() Sessievariabele gebruiken
We kunnen de functie ROW_NUMBER() emuleren om een rijnummer in oplopende volgorde toe te voegen met behulp van de sessievariabele.
Voer de onderstaande instructie uit en voeg het rijnummer voor elke rij toe, beginnend bij 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
In deze verklaring moeten we eerst de sessievariabele specificeren @rij nummer aangegeven door @prfix en stellen de waarde ervan in op 0. Vervolgens hebben we de gegevens uit de tabel Persoon geselecteerd en verhogen we de waarde voor variabele @row_number met één voor elke rij.
Na de succesvolle uitvoering van de query's krijgen we de onderstaande uitvoer:
Nogmaals, we gaan een sessievariabele als tabel gebruiken en deze kruisen met de brontabel met behulp van de volgende verklaring:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
We krijgen de uitvoer zoals hieronder: