MySQL rindas numura loga funkcija

Mysql Row Number Window Function



MySQL ietvaros ROW NUMBER () metode satur hronoloģisku skaitli katrai rindai nodalījumā. Tā ir tikai kāda veida loga iezīme. Rindu skaitlis sākas ar 1 ar rindu skaitli nodalījumā. Atcerieties, ka pirms 8.0 versijas MySQL neatļauj funkciju ROW NUMBER (), taču tā piedāvā sesijas mainīgo, kas palīdz atdarināt šo funkciju. Šajā rokasgrāmatā mēs sapratīsim vairāk par MySQL ROW NUMBER () funkcionalitāti un izveidosim secīgu numuru katrai rezultātu apkopojuma rindai. Programmā MySQL ROW_NUMBER () metodes tiek izmantotas kopā ar nākamajām klauzulām:

  • Tajā tiks izmantota klauzula Over ().
  • PASŪTĪJUMI PUNKTĀ sakārtot rezultātu saskaņā ar minētās kolonnas šķirošanas secību.

Sintakse:

>> SELECT kolonas_nosaukums,ROW_NUMBER()BEIDZOT( DAĻA PĒC kolonnas_vārda, SAKĀRTOT PĒC kolonas_nosaukums) AS rindas_numurs NO tabulas_nosaukums;

Atvērsim MySQL komandrindas klienta apvalku no lietojumprogrammām un ierakstīsim paroli, lai pieteiktos.









Lai sāktu darbu pie rindas numura funkcijas, jums jāizveido jauna tabula vai jāizmanto noklusējuma tabula. Kā parādīts zemāk esošajā attēlā, mums ir tabulas dzīvnieki tabulas datos ar dažiem ierakstiem. Iegūsim tās ierakstus, izmantojot SELECT instrukciju.



>> SELECT * NO dati .dzīvnieki;





Piemērs 01: ROW_NUMBER (), izmantojot klauzulu ORDER BY

Mēs izmantosim to pašu tabulu, lai izstrādātu dažus rindas numura funkcijas piemērus. Mēs izmantojam ROW_NUMBER () funkcijas piemēru, kam seko Over (), vienlaikus izmantojot tikai klauzulu ORDER BY. Mēs esam ieguvuši visus ierakstus, numerējot rindas saskaņā ar sleju Cenu secība. Mēs esam piešķīruši nosaukumu row_num kolonnai, kurā tiks saglabāti rindas numuri. Lai to izdarītu, izmēģināsim zemāk esošo komandu.

>> SELECT *,ROW_NUMBER()BEIDZOT( SAKĀRTOT PĒC Cena) AS rindas_numurs NO dati .dzīvnieki;

Izpildot iepriekš minēto vaicājumu, mēs redzam, ka rindas ir piešķirtas ar cipariem atbilstoši kolonnas Cena kārtošanas secībai. Jūs varētu domāt, ka slejas augšpusē ir jābūt dažām mazākām cenām, un tai ir jāšķiro atbilstoši tam. Taču klauzula ORDER BY redz tikai kolonnas pirmo ciparu vai alfabētu, lai kārtotu vērtības.



Izpildīsim to pašu vaicājumu, kam seko klauzula ORDER BY, izmantojot kolonnas Vecums kārtošanas secību. Rezultāts tiks norādīts atbilstoši kolonnai Vecums.

>> SELECT *,ROW_NUMBER()BEIDZOT( SAKĀRTOT PĒC Vecums) AS rindas_numurs NO dati .dzīvnieki;

Piemērs 02: ROW_NUMBER () Izmantojot klauzulu PARTITION BY

Rezultātu pārbaudei mēs izmantosim vienīgo klauzulu PARTITION BY vaicājumā ROW_NUMBER (). Mēs esam izmantojuši vaicājumu SELECT, lai ielādētu ierakstus, kam seko ROW_NUMBER () un OVER klauzula, vienlaikus sadalot tabulu atbilstoši kolonnai Krāsa. Izpildiet zemāk pievienoto komandu komandu apvalkā.

>> SELECT *,ROW_NUMBER()BEIDZOT( DAĻA PĒC Krāsa) AS rindas_numurs NO dati .dzīvnieki;

Rezultātā var redzēt, ka rindu numerācija ir piešķirta nodalījumos atbilstoši krāsu šķirošanas secībai. Tā kā mums ir 4 melnās krāsas vērtības, kas aizņem 4 rindas. Tāpēc tam ir četru rindu numuri, sākot no 1 līdz 4 un otrādi.

Izmēģiniet to pašu piemēru, kas šoreiz ir sadalīts slejā Dzimums. Kā mēs zinām, šajā tabulā ir tikai divi dzimumi, tāpēc tiks izveidoti 2 nodalījumi. Sievietes aizņem 9 rindas, tāpēc rindu numerācija ir no 1 līdz 9. Kamēr tēviņiem ir 8 vērtības, tāpēc tai ir 1 līdz 8.

>> SELECT *,ROW_NUMBER()BEIDZOT( DAĻA PĒC Dzimuma) AS rindas_numurs NO dati .dzīvnieki;

03. Piemērs: ROW_NUMBER (), izmantojot PARTITION BY & ORDER BY

Iepriekš minētos divus piemērus esam paveikuši MySQL komandrindā, tagad ir pienācis laiks veikt ROW_NUMBER () piemēru MySQL Workbench 8.0. Tātad, atveriet MySQL Workbench 8.0 no lietojumprogrammām. Lai sāktu darbu, savienojiet MySQL Workbench ar vietējo resursdatora sakņu datubāzi.

MySQL darbgalda kreisajā pusē atradīsit shēmas joslu, izpūtiet navigatoru. Šajā shēmas joslā jūs atradīsit datu bāzu sarakstu. Datu bāzu sarakstā jums būs dažādas tabulas un saglabātas procedūras, kā redzams zemāk esošajā attēlā. Mūsu datu bāzē “dati” ir dažādas tabulas. Mēs atvērsim tabulu ‘order1’, izmantojot vaicājuma apgabala komandu SELECT, lai sāktu to izmantot funkcijas ROW_NUMBER () īstenošanai.

>> SELECT * NO dati .pasūtījums1;

Tabulas secība1 ir parādīta režģa skatā, kā parādīts zemāk. Var redzēt, ka tai ir 4 kolonnu lauki, id, reģions, statuss un pasūtījuma Nr. Mēs izgūsim visus šīs tabulas ierakstus, vienlaikus izmantojot klauzulu ORDER BY un PARTITION BY.

MySQL Workbench 8.0 vaicājuma apgabalā ierakstiet tālāk parādīto vaicājumu. Vaicājums ir sākts ar klauzulu SELECT, iegūstot visus ierakstus, kam seko funkcija ROW_NUMBER () kopā ar klauzulu OVER. Pēc klauzulas OVER mēs esam norādījuši kolonnu Statuss, ko veic paziņojums PARTITION BY, lai sadalītu tabulu starpsienās saskaņā ar šo tabulu. Klauzula ORDER BY ir izmantota, lai sakārtotu tabulu dilstošā veidā atbilstoši kolonnai Reģions. Rindu numuri tiks saglabāti kolonnā row_num. Pieskarieties zibspuldzes ikonai, lai izpildītu šo komandu.

Tiks parādīts zemāk redzamais rezultāts. Pirmkārt, tabula ir sadalīta divās daļās atbilstoši kolonnas Statusa vērtībām. Pēc tam tas ir parādīts dilstošā secībā slejā “Reģions”, un nodalījumi ir piešķirti ar rindu numuriem.

Secinājums:

Visbeidzot, esam pabeiguši visus nepieciešamos piemērus, izmantojot funkciju ROW_NUMBER () MySQL Workbench un MySQL komandrindas klienta čaulā.