MySQL eilutės numerio lango funkcija

Mysql Row Number Window Function



„MySQL“ ROW NUMBER () metodas apima chronologinį skaičių kiekvienai skaidinio eilutei. Tai tik tam tikros rūšies lango ypatybė. Eilučių skaičius prasideda 1, o skaidinio eilučių skaičius. Atminkite, kad prieš 8.0 versiją „MySQL“ neleidžia funkcijos ROW NUMBER (), tačiau ji siūlo seanso kintamąjį, kuris padeda imituoti šią funkciją. Šiame vadove suprasime daugiau apie „MySQL ROW NUMBER“ () funkcijas ir sudarysime nuoseklų skaičių kiekvienai rezultatų rinkinio eilutei. „MySQL“ ROW_NUMBER () metodai naudojami su sekančiomis nuostatomis:

  • Jame bus naudojama sąlyga „Over“ ().
  • UŽSAKYMAI SĄLYGĄ surikiuokite rezultatą pagal minėto stulpelio rūšiavimo tvarką.

Sintaksė:

>> PASIRINKTI stulpelio_pavadinimas,ROW_NUMBER()PABAIGA( DALIS Pagal stulpelio_pavadinimą, RŪŠIUOTI PAGAL stulpelio_pavadinimas) AS eilutės_numeris NUO table_name;

Atidarykite „MySQL“ komandinės eilutės kliento apvalkalą iš programų ir įveskite slaptažodį, kad prisijungtumėte.









Norėdami pradėti dirbti su eilutės numerio funkcija, turite sukurti naują lentelę arba naudoti numatytąją lentelę. Kaip parodyta žemiau esančiame paveikslėlyje, schemos duomenyse turime lentelės gyvūnus su kai kuriais įrašais. Paimkime jo įrašus naudodami SELECT instrukciją.



>> PASIRINKTI * NUO duomenis .gyvūnai;





01 pavyzdys: ROW_NUMBER () Naudojant sąlygą ORDER BY

Mes naudosime tą pačią lentelę, kad išsiaiškintume kai kuriuos eilutės numerio funkcijos pavyzdžius. Mes paimame funkcijos ROW_NUMBER (), po kurios seka Over (), pavyzdį, o naudojame tik sąlygą ORDER BY. Nuskaitę eilutes pagal stulpelį Kainų tvarka, gavome visus įrašus. Stulpeliui, kuriame bus saugomi eilutės numeriai, davėme pavadinimą row_num. Pabandykime tai padaryti žemiau esančia komanda.

>> PASIRINKTI *,ROW_NUMBER()PABAIGA( RŪŠIUOTI PAGAL Kaina) AS eilutės_numeris NUO duomenis .gyvūnai;

Vykdydami aukščiau pateiktą užklausą matome, kad eilutės buvo priskirtos skaičiais pagal stulpelio „Kaina“ rūšiavimo tvarką. Galite pamanyti, kad kai kurios mažesnės kainos turėtų būti stulpelio viršuje ir turėtų būti rūšiuojamos pagal tai. Tačiau „ORDER BY“ sąlyga mato tik pirmąjį stulpelio skaitmenį arba abėcėlę vertėms rūšiuoti.



Vykdykime tą pačią užklausą, po kurios eina sąlyga ORDER BY, naudodami stulpelio „Amžius“ rūšiavimo tvarką. Rezultatas bus pateiktas pagal stulpelį Amžius.

>> PASIRINKTI *,ROW_NUMBER()PABAIGA( RŪŠIUOTI PAGAL Amžius) AS eilutės_numeris NUO duomenis .gyvūnai;

02 pavyzdys: ROW_NUMBER () Naudojant sąlygą PARTITION BY

Rezultatams tikrinti naudosime vienintelę sąlygą „PARTITION BY“ ROW_NUMBER () užklausoje. Mes naudojome užklausą SELECT, kad gautume įrašus, po kurių eina ROW_NUMBER () ir OVER, o skaidydami lentelę pagal stulpelį Spalva. Vykdykite žemiau pateiktą komandą komandų apvalkale.

>> PASIRINKTI *,ROW_NUMBER()PABAIGA( DALIS PAGAL Spalvą) AS eilutės_numeris NUO duomenis .gyvūnai;

Rezultate matote, kad eilučių numeracija buvo paskirta skaidiniuose pagal spalvų rūšiavimo tvarką. Turime 4 juodos spalvos reikšmes, kurios užima 4 eilutes. Štai kodėl jis turi keturių eilučių numerius, pradedant nuo 1 iki 4 ir atvirkščiai.

Išbandykite tą patį pavyzdį, šį kartą suskirstytą pagal stulpelį Lytis. Kaip žinome, šioje lentelėje turime tik dvi lytis, todėl bus suformuoti 2 skaidiniai. Patelės užima 9 eilutes, todėl eilučių numeracija yra nuo 1 iki 9. Nors patinai turi 8 reikšmes, todėl jos turi nuo 1 iki 8.

>> PASIRINKTI *,ROW_NUMBER()PABAIGA( DALIS Pagal lytį) AS eilutės_numeris NUO duomenis .gyvūnai;

03 pavyzdys: ROW_NUMBER () Naudojant PARTITION BY & ORDER BY

Mes padarėme du aukščiau pateiktus pavyzdžius „MySQL“ komandinėje eilutėje, dabar atėjo laikas padaryti ROW_NUMBER () pavyzdį „MySQL Workbench 8.0“. Taigi, atidarykite „MySQL Workbench 8.0“ iš programų. Norėdami pradėti dirbti, prijunkite „MySQL Workbench“ prie vietinės pagrindinės šaknies duomenų bazės.

Kairėje „MySQL Workbench“ pusėje rasite schemos juostą, pūskite navigatorių. Šioje schemos juostoje rasite duomenų bazių sąrašą. Duomenų bazių sąraše turėsite skirtingas lenteles ir saugomas procedūras, kaip matote žemiau esančiame paveikslėlyje. Mūsų duomenų bazėje „duomenys“ turime skirtingas lenteles. Mes atidarysime lentelę „order1“, naudodami užklausos srities komandą SELECT, kad pradėtume naudoti ją ROW_NUMBER () funkcijai įgyvendinti.

>> PASIRINKTI * NUO duomenis . užsakymas1;

Lentelės tvarka1 buvo pateikta tinklelio rodinyje, kaip parodyta žemiau. Matote, kad jis turi 4 stulpelių laukus: id, Region, Status ir OrderNo. Mes gausime visus šios lentelės įrašus, tuo pačiu metu naudodamiesi sąlyga ORDER BY ir PARTITION BY.

„MySQL Workbench 8.0“ užklausos srityje įveskite žemiau pateiktą užklausą. Užklausa buvo pradėta naudojant sąlygą SELECT, gaunant visus įrašus, po kurių sekė funkcija ROW_NUMBER () kartu su sąlyga OVER. Po sąlygos OVER mes nurodėme stulpelį „Būsena“, kurį atliko teiginys „PARTITION BY“, kad padalintume lentelę į skaidinius pagal šią lentelę. Sąlyga ORDER BY buvo naudojama lentelės išdėstymui mažėjančiu būdu pagal stulpelį Regionas. Eilučių numeriai bus palikti stulpelyje eilutės_num. Norėdami įvykdyti šią komandą, bakstelėkite blykstės piktogramą.

Bus parodytas žemiau pateiktas rezultatas. Visų pirma, lentelė buvo padalyta į dvi dalis pagal stulpelio Būsena reikšmes. Po to jis buvo pateiktas mažėjančia stulpelio „Regionas“ tvarka, o skaidiniams priskiriami eilučių numeriai.

Išvada:

Galiausiai, mes baigėme visus būtinus pavyzdžius, kaip naudoti funkciją „ROW_NUMBER ()“ „MySQL Workbench“ ir „MySQL Command-line Client Shell“.