MySQL radfönsterfunktion

Mysql Row Number Window Function



Inom MySQL innehåller en ROW NUMBER () -metod ett kronologiskt nummer för varje rad inuti partitionen. Det är bara ett fönsterfunktion av något slag. Raden börjar med 1 med raden i partitionen. Kom ihåg att före version 8.0 tillåter inte MySQL ROW NUMBER () -funktionen, men den erbjuder en sessionsvariabel som hjälper en att imitera den här funktionen. Vi kommer att förstå mer om MySQL ROW NUMBER () -funktionalitet i hela denna guide och producera ett nummer i rad för varje rad i resultatsamlingen. I MySQL används ROW_NUMBER () -metoderna med antingen de följande klausulerna:

  • Over () -klausulen kommer att användas inom den.
  • ORDERS BY klausul ordnar resultatet enligt sorteringsordningen för den nämnda kolumnen.

Syntax:

>> VÄLJ kolnamn,ROW_NUMBER()ÖVER( DELA BY col_name, SORTERA EFTER kolnamn) SOM rad_nummer FRÅN tabellnamn;

Låt oss öppna MySQL-kommandoradsklientskalet från applikationerna och skriv in lösenordet för att logga in.









Du måste skapa en ny tabell eller använda standardtabellen för att börja arbeta med radnummerfunktionen. Som presenteras i bilden nedan har vi en tabell djur i schemat data med några poster i den. Låt oss hämta dess poster med SELECT -instruktionen.



>> VÄLJ * FRÅN data .djur;





Exempel 01: ROW_NUMBER () Med ORDER BY -klausul

Vi kommer att använda samma tabell för att utveckla några exempel på radnummerfunktionen. Vi tar ett exempel på funktionen ROW_NUMBER () följt av Over (), medan vi bara använder ORDER BY -satsen. Vi har hämtat alla poster medan vi numrerat raderna enligt kolumnen Prisordning. Vi har gett namnet row_num till en kolumn som lagrar radens nummer. Låt oss prova kommandot nedan för att göra det.

>> VÄLJ *,ROW_NUMBER()ÖVER( SORTERA EFTER Pris) SOM rad_nummer FRÅN data .djur;

Vid genomförandet av ovanstående fråga kan vi se att raderna har tilldelats nummer enligt sorteringsordningen för kolumnen Price. Du kanske tror att några mindre priser borde vara högst upp i kolumnen och det bör sortera efter det. Men ORDER BY -satsen ser bara den första siffran eller alfabetet i kolumnen för att sortera värden.



Låt oss utföra samma fråga följt av ORDER BY -klausulen medan du använder sorteringsordningen för kolumnen Age. Utdata kommer att ges enligt kolumnen Ålder.

>> VÄLJ *,ROW_NUMBER()ÖVER( SORTERA EFTER Ålder) SOM rad_nummer FRÅN data .djur;

Exempel 02: ROW_NUMBER () Användning av PARTITION BY -klausul

Vi kommer att använda den enda PARTITION BY -satsen i ROW_NUMBER () -frågan för att kontrollera resultaten. Vi har använt SELECT -frågan för att hämta posterna följt av ROW_NUMBER () och OVER -klausulen, medan vi partitionerar tabellen enligt kolumnen Color. Utför kommandot bifogade nedan i kommandoskalet.

>> VÄLJ *,ROW_NUMBER()ÖVER( DELA BY Färg) SOM rad_nummer FRÅN data .djur;

Du kan se i resultatet att numreringen av rader har tilldelats i partitioner, enligt färgsorteringsordningen. Eftersom vi har 4 värden för färg svart som tar 4 rader. Det är därför det har fyra rader från 1 till 4 och vice versa.

Prova samma exempel, delad av kolumnen Kön den här gången. Som vi vet har vi bara två kön i denna tabell, det är därför 2 partitioner kommer att bildas. Kvinnor upptar 9 rader, det är därför den har radnummerering från 1 till 9. Medan män har 8 värden, har det därför 1 till 8.

>> VÄLJ *,ROW_NUMBER()ÖVER( DELA AV Kön) SOM rad_nummer FRÅN data .djur;

Exempel 03: ROW_NUMBER () Använda PARTITION BY & ORDER BY

Vi har gjort ovanstående två exempel på MySQL-kommandoraden, nu är det dags att göra ROW_NUMBER () -exemplet i MySQL Workbench 8.0. Så öppna MySQL Workbench 8.0 från applikationerna. Anslut MySQL Workbench med den lokala värdrotdatabasen för att börja arbeta.

På vänster sida av MySQL Workbench hittar du schemastapeln, blåsa i navigatorn. I det här schemafältet hittar du listan över databaser. Under databaslistan kommer du att ha olika tabeller och lagrade procedurer, som du kan se i bilden nedan. Vi har olika tabeller i vår databas 'data'. Vi kommer att öppna tabellen 'order1' med SELECT -kommandot i frågeområdet för att börja använda den för funktionen ROW_NUMBER ().

>> VÄLJ * FRÅN data .order1;

Tabellordningen1 har visats i rutnätvyn enligt nedan. Du kan se att den har fyra kolumnfält, id, region, status och ordernr. Vi kommer att hämta alla poster i denna tabell medan vi använder klausulen ORDER BY och PARTITION BY, båda samtidigt.

I frågeområdet i MySQL Workbench 8.0 skriver du nedanstående fråga. Frågan har startats med SELECT -satsen och hämtar alla poster följt av funktionen ROW_NUMBER () tillsammans med OVER -satsen. Efter OVER -klausulen har vi specificerat kolumnen Status som fortsätts av PARTITION BY -satsen för att dela upp tabellen i partitioner enligt denna tabell. ORDER BY -satsen har använts för att ordna bordet i fallande sätt enligt kolumnen Region. Radnumren sparas i kolumnen rad_nummer. Tryck på blixtikonen för att utföra detta kommando.

Resultatet nedan visas. Först och främst har tabellen segregerats i två delar enligt värdena för kolumnstatus. Därefter har den presenterats i fallande ordning i kolumnen 'Region' och partitionerna har tilldelats radnumren.

Slutsats:

Slutligen har vi slutfört alla nödvändiga exempel för att använda funktionen ROW_NUMBER () i MySQL Workbench och MySQL Command-line Client Shell.