MySQL Prozorska funkcija prozora

Mysql Row Number Window Function



Unutar MySQL -a, metoda ROW NUMBER () sadrži kronološki broj za svaki redak unutar particije. To je samo neka vrsta prozorske značajke. Broj redova počinje s 1 s brojem redova unutar particije. Upamtite, prije verzije 8.0, MySQL ne dopušta funkciju ROW NUMBER (), ali nudi varijablu sesije koja pomaže oponašanju ove značajke. U ovom ćemo vodiču razumjeti više o funkciji MySQL ROW NUMBER () i proizvesti uzastopni broj za svaki redak u zbirci rezultata. U MySQL -u se metode ROW_NUMBER () koriste s bilo kojim od sljedećih klauzula:

  • U njemu će se koristiti klauzula Over ().
  • ORDERS BY klauzula slaže rezultat prema redoslijedu sortiranja spomenutog stupca.

Sintaksa:

>> ODABERI col_name,ROW_NUMBER()NAD( PODJELA BY col_name, NARUČI PO col_name) KAO red_broj IZ ime_tabele;

Otvorimo klijentsku ljusku naredbenog retka MySQL iz aplikacija i upišimo lozinku za prijavu.









Morate stvoriti novu tablicu ili upotrijebiti zadanu tablicu za početak rada na funkciji broja retka. Kao što je prikazano na donjoj slici, imamo tablične životinje u shemi s nekim zapisima. Dohvatimo njegove zapise pomoću instrukcije SELECT.



>> ODABERI * IZ podaci .životinje;





Primjer 01: ROW_NUMBER () pomoću ORDER BY klauzule

Koristit ćemo istu tablicu za razradu nekih primjera funkcije broja retka. Uzimamo primjer funkcije ROW_NUMBER () nakon koje slijedi Over (), a koristimo samo klauzulu ORDER BY. Dobivali smo sve zapise dok smo numerirali redove prema stupcu Nalog cijena. Stupcu smo dali naziv row_num koji će pohraniti brojeve retka. Pokušajmo to učiniti s naredbom u nastavku.

>> ODABERI *,ROW_NUMBER()NAD( NARUČI PO Cijena) KAO red_broj IZ podaci .životinje;

Nakon izvršavanja gornjeg upita, možemo vidjeti da su redovi dodijeljeni brojevima prema redoslijedu sortiranja stupca Cijena. Možda mislite da bi neke manje cijene trebale biti na vrhu stupca i prema tome bi se trebale sortirati. Ali klauzula ORDER BY vidi samo prvu znamenku ili abecedu stupca za sortiranje vrijednosti.



Izvršimo isti upit nakon kojeg slijedi ORDER BY klauzula koristeći redoslijed sortiranja stupca Age. Izlaz će se dati prema stupcu Dob.

>> ODABERI *,ROW_NUMBER()NAD( NARUČI PO Dob) KAO red_broj IZ podaci .životinje;

Primjer 02: ROW_NUMBER () Korištenje klauzule PARTITION BY

Za provjeru rezultata koristit ćemo jedinu klauzulu PARTITION BY u upitu ROW_NUMBER (). Koristili smo upit SELECT za dohvaćanje zapisa nakon kojih slijedi ROW_NUMBER () i OVER klauzula, dok smo tablicu podijelili prema stupcu Boja. Izvršite naredbu ispod u naredbenoj ljusci.

>> ODABERI *,ROW_NUMBER()NAD( PODJELA PO BOJI) KAO red_broj IZ podaci .životinje;

U rezultatu možete vidjeti da je numeriranje redova dodijeljeno particijama, prema redoslijedu sortiranja boja. Kako imamo 4 vrijednosti za crnu boju koja zauzima 4 reda. Zato ima brojeve u četiri reda koji počinju od 1 do 4 i obrnuto.

Isprobajte isti primjer, ovaj put podijeljen po stupcu Spol. Kao što znamo, u ovoj tablici imamo samo dva spola, zato će se formirati 2 particije. Ženke zauzimaju 9 redova, zato ima brojeve od 1 do 9. Dok mužjaci imaju 8 vrijednosti, zato imaju 1 do 8.

>> ODABERI *,ROW_NUMBER()NAD( PODJELA PO SOLU) KAO red_broj IZ podaci .životinje;

Primjer 03: ROW_NUMBER () Koristeći PARTITION BY & ORDER BY

Napravili smo gornja dva primjera u naredbenom retku MySQL, sada je vrijeme da napravimo primjer ROW_NUMBER () u MySQL Workbenchu ​​8.0. Dakle, otvorite MySQL Workbench 8.0 iz aplikacija. Za početak rada povežite MySQL Workbench s lokalnom bazom podataka korijena hosta.

Na lijevoj strani MySQL radnog stola pronaći ćete traku sheme, ispuhati navigator. Na ovoj traci sheme pronaći ćete popis baza podataka. Na popisu baza podataka imat ćete različite tablice i pohranjene procedure, kao što možete vidjeti na donjoj slici. U našoj bazi podataka imamo različite tablice. Otvorit ćemo tablicu 'order1' pomoću naredbe SELECT u području upita kako bismo je počeli koristiti za implementaciju funkcije ROW_NUMBER ().

>> ODABERI * IZ podaci .naredba1;

Redoslijed tablice1 prikazan je u prikazu rešetke kao što je prikazano u nastavku. Možete vidjeti da ima 4 polja stupca, id, regiju, status i redni br. Dohvatit ćemo sve zapise ove tablice dok koristimo klauzule ORDER BY i PARTITION BY, obje u isto vrijeme.

U područje upita MySQL Workbench 8.0 upišite upit prikazan ispod. Upit je pokrenut klauzulom SELECT, dohvativši sve zapise nakon kojih slijedi funkcija ROW_NUMBER () zajedno s odredbom OVER. Nakon klauzule OVER, specificirali smo stupac Status nastavljen izrazom PARTITION BY za podjelu tablice na particije prema ovoj tablici. Odredba ORDER BY koristi se za slaganje tablice silazno prema stupcu Regija. Brojevi redaka čuvat će se u stupcu row_num. Dodirnite ikonu bljeskalice da biste izvršili ovu naredbu.

Prikazat će se dolje prikazani rezultat. Prije svega, tablica je podijeljena na dva dijela prema vrijednostima stupca Status. Nakon toga, predstavljen je u opadajućem redoslijedu stupca ‘Regija’, a particijama su dodijeljeni brojevi redaka.

Zaključak:

Konačno, dovršili smo sve potrebne primjere korištenja funkcije ROW_NUMBER () u MySQL Workbench-u i MySQL-ovoj klijentskoj ljuski naredbenog retka.