MySQL Rijnummer Venster Functie

Mysql Row Number Window Function



Binnen MySQL bevat een ROW NUMBER()-methode een chronologisch nummer voor elke rij binnen de partitie. Het is gewoon een soort vensterfunctie. Het aantal rijen begint bij 1 met het aantal rijen binnen de partitie. Onthoud dat vóór versie 8.0 MySQL de functie ROW NUMBER() niet toestaat, maar het biedt een sessievariabele die iemand helpt deze functie te imiteren. We zullen in deze handleiding meer te weten komen over de functionaliteit van MySQL ROW NUMBER() en een opeenvolgend nummer produceren voor elke rij in de resultatenverzameling. In MySQL worden de ROW_NUMBER()-methoden gebruikt met de volgende clausules:

  • De clausule Over() wordt erin gebruikt.
  • ORDERS BY-component rangschik het resultaat volgens de sorteervolgorde van de genoemde kolom.

Syntaxis:

>> KIES col_name,RIJ NUMMER()OVER( PARTITIE DOOR col_name, BESTEL DOOR col_name) ALS rij_nummer VAN tafel naam;

Laten we de MySQL-opdrachtregelclientshell openen vanuit de applicaties en het wachtwoord typen om in te loggen.









U moet een nieuwe tabel maken of de standaardtabel gebruiken om aan de rijnummerfunctie te gaan werken. Zoals weergegeven in de onderstaande afbeelding, hebben we een tabel met dieren in de schemagegevens met enkele records erin. Laten we de records ophalen met behulp van de SELECT-instructie.



>> KIES * VAN gegevens .dieren;





Voorbeeld 01: ROW_NUMBER() met behulp van ORDER BY-clausule

We zullen dezelfde tabel gebruiken om enkele voorbeelden van de rijnummerfunctie uit te werken. We nemen een voorbeeld van de functie ROW_NUMBER() gevolgd door Over(), terwijl we alleen de ORDER BY-component gebruiken. We hebben alle records opgehaald terwijl we de rijen nummerden volgens de kolom Prijsvolgorde. We hebben de naam row_num gegeven aan een kolom, waarin de rijnummers worden opgeslagen. Laten we de onderstaande opdracht proberen om dit te doen.

>> KIES *,RIJ NUMMER()OVER( BESTEL DOOR Prijs) ALS rij_nummer VAN gegevens .dieren;

Bij het uitvoeren van de bovenstaande query kunnen we zien dat de rijen zijn toegewezen met nummers volgens de sorteervolgorde van de kolom Prijs. Je zou kunnen denken dat wat kleinere prijzen bovenaan de kolom zouden moeten staan ​​en dat het daarop zou moeten sorteren. Maar de ORDER BY-component ziet alleen het eerste cijfer of alfabet van de kolom om waarden te sorteren.



Laten we dezelfde query uitvoeren, gevolgd door de ORDER BY-component, terwijl we de sorteervolgorde van de kolom Leeftijd gebruiken. De output wordt gegeven volgens de kolom Leeftijd.

>> KIES *,RIJ NUMMER()OVER( BESTEL DOOR Leeftijd) ALS rij_nummer VAN gegevens .dieren;

Voorbeeld 02: ROW_NUMBER() PARTITION BY-clausule gebruiken

We zullen de enige PARTITION BY-component in de ROW_NUMBER()-query gebruiken om de resultaten te controleren. We hebben de SELECT-query gebruikt om de records op te halen, gevolgd door de clausule ROW_NUMBER() en OVER, terwijl we de tabel hebben gepartitioneerd volgens de kolom Kleur. Voer de bijgevoegde onderstaande opdracht uit in de opdrachtshell.

>> KIES *,RIJ NUMMER()OVER( PARTITIE OP Kleur:) ALS rij_nummer VAN gegevens .dieren;

U kunt in het resultaat zien dat de nummering van rijen is toegewezen in partities, volgens de sorteervolgorde van de kleuren. Omdat we 4 waarden hebben voor de kleur Zwart, zijn er 4 rijen nodig. Daarom heeft het nummers met vier rijen, beginnend van 1 tot 4 en vice versa.

Probeer hetzelfde voorbeeld, deze keer gepartitioneerd door de kolom Geslacht. Zoals we weten, hebben we slechts twee geslachten in deze tabel, daarom zullen er 2 partities worden gevormd. Vrouwtjes bezetten 9 rijen, daarom heeft het rijnummering van 1 tot 9. Terwijl mannetjes 8 waarden hebben, heeft het daarom 1 tot 8.

>> KIES *,RIJ NUMMER()OVER( PARTITIE OP geslacht) ALS rij_nummer VAN gegevens .dieren;

Voorbeeld 03: ROW_NUMBER() met PARTITION BY & ORDER BY

We hebben de bovenstaande twee voorbeelden in de MySQL-opdrachtregel gedaan, nu is het tijd om het ROW_NUMBER()-voorbeeld in de MySQL Workbench 8.0 te doen. Open dus de MySQL Workbench 8.0 vanuit de applicaties. Verbind de MySQL Workbench met de lokale host-rootdatabase om aan de slag te gaan.

Aan de linkerkant van de MySQL Workbench vindt u de Schema-balk, blaas de navigator. In deze Schemabalk vindt u de lijst met databases. Onder de databaselijst heb je verschillende tabellen en opgeslagen procedures, zoals je kunt zien in de onderstaande afbeelding. We hebben verschillende tabellen in onze database ‘data’. We zullen de tabel 'order1' openen met behulp van de SELECT-opdracht in het querygebied om deze te gaan gebruiken voor de ROW_NUMBER() functie-implementatie.

>> KIES * VAN gegevens .order1;

De tabelvolgorde1 is weergegeven in de rasterweergave zoals hieronder weergegeven. U kunt zien dat het 4 kolomvelden heeft, id, Regio, Status en Bestelnr. We halen alle records van deze tabel op terwijl we de ORDER BY- en PARTITION BY-clausules tegelijkertijd gebruiken.

Typ de onderstaande query in het querygebied van MySQL Workbench 8.0. De query is gestart met de SELECT-component, waarbij alle records worden opgehaald, gevolgd door de functie ROW_NUMBER() samen met de OVER-component. Na de OVER-clausule hebben we de kolom Status gespecificeerd die wordt gevolgd door de PARTITION BY-instructie om de tabel volgens deze tabel in partities te verdelen. De ORDER BY-component wordt gebruikt om de tabel aflopend te rangschikken volgens de kolom Regio. De rijnummers worden bewaard in de kolom row_num. Tik op het flitspictogram om deze opdracht uit te voeren.

Het hieronder weergegeven resultaat wordt getoond. Allereerst is de tabel opgedeeld in twee delen volgens de waarden van kolom Status. Daarna is het weergegeven in aflopende volgorde van kolom ‘Regio’ en zijn de partities voorzien van de rijnummers.

Conclusie:

Ten slotte hebben we alle benodigde voorbeelden voltooid bij het gebruik van de ROW_NUMBER()-functie in MySQL Workbench en MySQL Command-line Client Shell.