MySQL -i reanumbri akna funktsioon

Mysql Row Number Window Function



MySQL -is sisaldab ROW NUMBER () -meetod kronoloogilist numbrit iga sektsiooni sees oleva rea ​​jaoks. See on lihtsalt mingi aknafunktsioon. Ridade arv algab 1 -st partitsiooni sees olevate ridade arvuga. Pidage meeles, et enne versiooni 8.0 ei luba MySQL funktsiooni ROW NUMBER (), kuid pakub seansi muutujat, mis aitab seda funktsiooni jäljendada. Selles juhendis mõistame MySQL RIDA NUMBER () funktsionaalsusest rohkem ja koostame tulemuste kogumise iga rea ​​jaoks järjestikuse numbri. MySQL -is kasutatakse ROW_NUMBER () meetodeid järgnevate klauslitega:

  • Selle sees kasutatakse klauslit Over ().
  • Klausel TELLIMUSED korraldab tulemuse vastavalt nimetatud veeru sortimisjärjestusele.

Süntaks:

>> VALI col_name,ROW_NUMBER()LÕPPENUD( OSA Veeru_nime järgi, TELLI col_name) AS rea_number Alates tabeli_nimi;

Avame rakendustest MySQL käsurea kliendikesta ja sisestame sisselogimiseks parooli.







Reanumbri funktsiooni kallal töötamiseks peate looma uue tabeli või kasutama vaiketabelit. Nagu on näidatud alloleval pildil, on meil skeemiandmetes tabelloomad koos mõne kirjega. Toome selle kirjed käsu SELECT abil.



>> VALI * Alates andmed .loomad;





Näide 01: ROW_NUMBER () klausli ORDER BY kasutamine

Kasutame sama tabelit, et töötada välja mõned reanumbri funktsiooni näited. Võtame näite funktsioonist ROW_NUMBER (), millele järgneb Over (), kasutades ainult klauslit ORDER BY. Oleme ridu nummerdades veergu Hinnakord vastavalt ridu nummerdanud. Oleme andnud veerule nime row_num, mis salvestab rea numbrid. Proovime selleks allolevat käsku.

>> VALI *,ROW_NUMBER()LÕPPENUD( TELLI Hind) AS rea_number Alates andmed .loomad;

Ülaltoodud päringu täitmisel näeme, et ridadele on määratud numbrid vastavalt veeru Hind sorteerimisjärjestusele. Võib arvata, et mõned väiksemad hinnad peaksid olema veeru ülaosas ja see peaks selle järgi sorteerima. Kuid klausel ORDER BY näeb väärtuste sortimiseks ainult veeru esimest numbrit või tähestikku.



Käivitame sama päringu, millele järgneb klausel ORDER BY, kasutades veeru Age sorteerimisjärjestust. Väljund antakse vastavalt veerule Vanus.

>> VALI *,ROW_NUMBER()LÕPPENUD( TELLI Vanus) AS rea_number Alates andmed .loomad;

Näide 02: ROW_NUMBER () PARTITION BY klausli kasutamine

Tulemuste kontrollimiseks kasutame päringu ROW_NUMBER () ainsat klauslit PARTITION BY. Oleme kasutanud päringut SELECT, et tuua kirjeid, millele järgneb klausel ROW_NUMBER () ja OVER, jagades tabeli vastavalt veerule Värv. Täitke käsu kestas alltoodud käsk.

>> VALI *,ROW_NUMBER()LÕPPENUD( OSA Värvi järgi) AS rea_number Alates andmed .loomad;

Tulemusena näete, et ridade numeratsioon on määratud sektsioonides vastavalt värvide sortimise järjekorrale. Kuna meil on musta värvi jaoks 4 väärtust, mis võtab 4 rida. Sellepärast on sellel nelja rea ​​numbrid alates 1 kuni 4 ja vastupidi.

Proovige sama näidet, mis on seekord jaotatud veeru Sugu järgi. Nagu me teame, on selles tabelis ainult kaks sugu, sellepärast moodustatakse 2 partitsiooni. Emased hõivavad 9 rida, seetõttu on nende ridade numeratsioon vahemikus 1 kuni 9. Kui meestel on 8 väärtust, on sellepärast 1–8.

>> VALI *,ROW_NUMBER()LÕPPENUD( OSA Sooliselt) AS rea_number Alates andmed .loomad;

Näide 03: ROW_NUMBER () PARTITION BY & ORDER BY kasutamine

Oleme teinud ülaltoodud kaks näidet MySQL käsurealt, nüüd on aeg teha näide ROW_NUMBER () MySQL Workbench 8.0. Niisiis, avage rakendustest MySQL Workbench 8.0. Töö alustamiseks ühendage MySQL Workbench kohaliku hosti juurbaasiga.

MySQL töölaua vasakult küljelt leiate skeemiriba, lööge navigaator läbi. Sellel skeemiribal leiate andmebaaside loendi. Andmebaaside loendi all on teil erinevad tabelid ja salvestatud protseduurid, nagu näete alloleval pildil. Meil on andmebaasis „andmed” erinevad tabelid. Avame tabeli ‘order1’, kasutades päringuala käsku SELECT, et seda funktsiooni ROW_NUMBER () rakendamiseks kasutada.

>> VALI * Alates andmed .tellimus1;

Tabeli järjekord1 on kuvatud ruudustikvaates, nagu allpool näidatud. Näete, et sellel on 4 veeruvälja, id, Region, Status ja OrderNo. Toome kõik selle tabeli kirjed, kasutades samal ajal klauslit ORDER BY ja PARTITION BY.

Tippige MySQL Workbench 8.0 päringualale allpool kuvatud päring. Päring on käivitatud klausliga SELECT, tuues kõik kirjed, millele järgneb funktsioon ROW_NUMBER () koos klausliga OVER. Pärast klauslit OVER oleme määranud veeru Olek, mida käitab lause PARTITION BY, et jagada tabel vastavalt sellele tabelile partitsioonideks. Klauslit ORDER BY kasutatakse tabeli korraldamiseks kahanevas järjekorras vastavalt veerule Piirkond. Reanumbreid hoitakse veerus row_num. Selle käsu täitmiseks puudutage välguikooni.

Kuvatakse allpool kuvatud tulemus. Esiteks on tabel eraldatud kaheks osaks vastavalt veeru Olek väärtustele. Pärast seda on see esitatud veeru „Piirkond” kahanevas järjekorras ja vaheseinad on määratud reanumbritega.

Järeldus:

Lõpuks oleme lõpetanud kõik vajalikud näited funktsiooni ROW_NUMBER () kasutamisel MySQL Workbenchis ja MySQL käsurea kliendi kestas.