MySQL MariaDB

MySQL radnummerfönsterfunktion

MySQL radnummerfönsterfunktion
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. Siffran för rader börjar vid 1 med siffran för rader inom partitionen. Kom ihåg, innan version 8.0, MySQL tillåter inte funktionen ROW NUMBER () 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 den här guiden och producera ett på varandra följande nummer för varje rad i resultatsamlingen. I MySQL används metoderna ROW_NUMBER () med antingen de följande klausulerna:

Syntax:

>> VÄLJ kolnamn, ROW_NUMBER () ÖVER (DELNING PÅ kolnamn, BESTÄLL EFTER kolnamn) SOM radnummer FRÅN tabellnamn;

Låt oss öppna MySQL-kommandoradsklienten från applikationerna och skriv 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 sina poster med SELECT-instruktionen.

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

Exempel 01: ROW_NUMBER () Använd ORDER BY-klausul

Vi kommer att använda samma tabell för att utarbeta 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 "Pris". 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 *, RAD_NUMBER () ÖVER (BESTÄLL efter pris) SOM radnummer FRÅN data.djur;

Efter att ha utfört ovanstående fråga kan vi se att raderna har tilldelats nummer enligt sorteringsordningen i kolumnen "Pris". Du kanske tror att några mindre priser bör vara högst upp i kolumnen och det ska sorteras enligt det. Men ORDER BY-klausulen 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-satsen medan vi använder sorteringsordningen för kolumnen "Ålder". Produktionen ges enligt kolumnen "Ålder".

>> VÄLJ *, RAD_NUMBER () ÖVER (BESTÄLL EFTER Ålder) SOM radnummer FRÅN data.djur;

Exempel 02: ROW_NUMBER () Använd PARTITION BY Clause

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

>> VÄLJ *, RAD_NUMBER () ÖVER (DELNING PÅ färg) SOM radnummer från data.djur;

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

Prova samma exempel, partitionerat med kolumnen "Kön" den här gången. Som vi vet har vi bara två kön i den här tabellen, det är därför två partitioner kommer att bildas. Kvinnor upptar 9 rader, det är därför det har radnumrering från 1 till 9. Medan män har 8 värden, har det därför 1 till 8.

>> VÄLJ *, RAD_NUMBER () ÖVER (DELNING AV KÖN) SOM radnummer FRÅN data.djur;

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

Vi har gjort ovanstående två exempel i 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 till den lokala värddatabasen för att börja arbeta.

På vänster sida av MySQL Workbench hittar du Schemafältet, spräng navigatorn. I detta schemafält 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 öppnar tabellen 'order1' med kommandot SELECT i frågeområdet för att börja använda det för implementering av ROW_NUMBER () -funktion.

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

Tabellen "order1" har visats i rutvyn enligt nedan. Du kan se att den har fyra kolumnfält, id, Region, Status och OrderNo. Vi kommer att hämta alla poster i denna tabell medan vi använder ORDER BY- och PARTITION BY-klausulerna, båda samtidigt.

I frågeområdet i MySQL Workbench 8.0, skriv frågan nedan. Frågan har startats med SELECT-satsen, hämtning av alla poster följt av ROW_NUMBER () -funktionen tillsammans med OVER-satsen. Efter OVER-klausulen har vi specificerat kolumnen "Status" fortsat av "PARTITION BY" -uttrycket för att dela upp tabellen i partitioner enligt denna tabell. ORDER BY-klausulen har använts för att ordna tabellen på fallande sätt enligt kolumn "Region". Radnumren kommer att sparas i kolumnen ”row_num”. Tryck på blixtikonen för att utföra detta kommando.

Resultatet nedan visas. Först och främst har tabellen delats upp i två delar enligt värdena i kolumnen "Status". Därefter har den presenterats i den fallande ordningen i kolumnen 'Region' och partitionerna har tilldelats radnumren.

Slutsats:

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

Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...
OpenTTD vs Simutrans
Att skapa din egen transportsimulering kan vara rolig, avkopplande och extremt lockande. Det är därför du måste se till att du testar så många spel so...
OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...