MySQL rækkenummer vindue funktion

Mysql Row Number Window Function



Inden for MySQL indeholder en RÆKKE NUMMER () metode et kronologisk tal for hver række inde i partitionen. Det er bare en slags vinduesfunktion. Rækketallet begynder med 1 med rækken i rækken inden for partitionen. Husk, at før version 8.0 tillader MySQL ikke funktionen RÆKKE NUMMER (), men den tilbyder en sessionsvariabel, der hjælper en med at efterligne denne funktion. Vi vil forstå mere om MySQL RÆKKENUMMER () funktionalitet i hele denne vejledning og producere et nummer i træk for hver række i resultatsamlingen. I MySQL bruges ROW_NUMBER () -metoderne med enten de efterfølgende klausuler:

  • Over () -klausulen vil blive brugt inden for den.
  • ORDERS BY -klausulen arrangerer resultatet i henhold til sorteringsrækkefølgen for den nævnte kolonne.

Syntaks:

>> VÆLG col_name,ROW_NUMBER()OVER( SKILLEVÆG AF col_name, BESTIL AF col_name) SOM række_nummer FRA tabelnavn;

Lad os åbne MySQL-kommandolinjeklientskallen fra applikationerne og indtaste adgangskoden for at logge ind.









Du skal oprette en ny tabel eller bruge standardtabellen til at begynde at arbejde på rækkenummerfunktionen. Som præsenteret i billedet herunder har vi et borddyr i skemadataene med nogle poster i det. Lad os hente dets poster ved hjælp af SELECT -instruktionen.



>> VÆLG * FRA data .dyr;





Eksempel 01: ROW_NUMBER () Brug af ORDER BY -klausul

Vi vil bruge den samme tabel til at uddybe nogle eksempler på rækkenummerfunktionen. Vi tager et eksempel på funktionen ROW_NUMBER () efterfulgt af Over (), mens vi kun bruger ORDER BY -klausulen. Vi har hentet alle optegnelserne, mens vi har nummereret rækkerne i henhold til kolonnen Prisorden. Vi har givet navnet row_num til en kolonne, som gemmer rækkenes numre. Lad os prøve nedenstående kommando for at gøre det.

>> VÆLG *,ROW_NUMBER()OVER( BESTIL AF Pris) SOM række_nummer FRA data .dyr;

Ved udførelse af ovenstående forespørgsel kan vi se, at rækkerne er blevet tildelt numre i henhold til sorteringsrækkefølgen for kolonnen Pris. Du tror måske, at nogle mindre priser skal være øverst i kolonnen, og det skal sorteres efter det. Men ORDER BY -klausulen ser kun det første ciffer eller alfabet i kolonnen til at sortere værdier.



Lad os udføre den samme forespørgsel efterfulgt af ORDER BY -klausulen, mens vi bruger sorteringsrækkefølgen for kolonnen Alder. Outputtet vil blive givet i henhold til kolonnen Alder.

>> VÆLG *,ROW_NUMBER()OVER( BESTIL AF Alder) SOM række_nummer FRA data .dyr;

Eksempel 02: ROW_NUMBER () Brug af PARTITION BY -klausul

Vi vil bruge den eneste PARTITION BY -klausul i forespørgslen ROW_NUMBER () til at kontrollere resultaterne. Vi har brugt SELECT -forespørgslen til at hente posterne efterfulgt af ROW_NUMBER () og OVER -klausul, mens vi opdeler tabellen i henhold til kolonnen Farve. Udfør kommandoen nedenfor i kommandoskallen.

>> VÆLG *,ROW_NUMBER()OVER( SKILLEVÆG Efter farve) SOM række_nummer FRA data .dyr;

Du kan se i resultatet, at nummereringen af ​​rækker er blevet tildelt i partitioner i henhold til farvesorteringsrækkefølgen. Da vi har 4 værdier for farve sort, der tager 4 rækker. Derfor har den fået firerækkede tal fra 1 til 4 og omvendt.

Prøv det samme eksempel, der er delt i kolonnen Køn denne gang. Som vi ved, har vi kun to køn i denne tabel, derfor dannes 2 partitioner. Hunner indtager 9 rækker, derfor har den nummerering fra 1 til 9. Mens mænd har 8 værdier, har den derfor 1 til 8.

>> VÆLG *,ROW_NUMBER()OVER( SKILLEVÆG AF Køn) SOM række_nummer FRA data .dyr;

Eksempel 03: ROW_NUMBER () Brug af PARTITION BY & ORDER BY

Vi har gjort de to ovenstående eksempler i MySQL-kommandolinjen, nu er det tid til at gøre ROW_NUMBER () -eksemplet i MySQL Workbench 8.0. Så åbn MySQL Workbench 8.0 fra applikationerne. Tilslut MySQL Workbench med den lokale værtsrotdatabase for at begynde at arbejde.

På venstre side af MySQL Workbench finder du skemastangen, blæser navigatoren. I denne skemabalke finder du listen over databaser. Under databaselisten har du forskellige tabeller og lagrede procedurer, som du kan se på billedet herunder. Vi har forskellige tabeller i vores database 'data'. Vi åbner tabellen ‘ordre1’ ved hjælp af SELECT -kommandoen i forespørgselsområdet for at begynde at bruge den til funktionen ROW_NUMBER ().

>> VÆLG * FRA data .order1;

Tabellenes rækkefølge1 er blevet vist i gittervisningen som vist nedenfor. Du kan se, at den har 4 kolonnefelter, id, region, status og ordrenr. Vi henter alle optegnelser i denne tabel, mens vi bruger klausulen ORDER BY og PARTITION BY, begge på samme tid.

Skriv forespørgslen nedenfor i forespørgselsområdet i MySQL Workbench 8.0. Forespørgslen er startet med SELECT -klausulen, idet alle poster blev hentet efterfulgt af funktionen ROW_NUMBER () sammen med OVER -klausulen. Efter OVER -klausulen har vi specificeret kolonnen Status, der fortsættes af PARTITION BY -sætningen for at opdele tabellen i partitioner i henhold til denne tabel. ORDER BY -klausulen er blevet brugt til at arrangere tabellen i faldende måde i henhold til kolonne Region. Rækketallene bevares i kolonnen row_num. Tryk på flashikonet for at udføre denne kommando.

Resultatet nedenfor vises. Først og fremmest er tabellen blevet adskilt i to dele i henhold til værdierne i kolonne Status. Derefter er det blevet præsenteret i den faldende rækkefølge i kolonnen ‘Region’, og partitionerne er blevet tildelt rækketallene.

Konklusion:

Endelig har vi udfyldt alle de nødvendige eksempler ved brug af funktionen ROW_NUMBER () i MySQL Workbench og MySQL Command-line Client Shell.