Funkce okna čísla řádku MySQL

Mysql Row Number Window Function



V rámci MySQL obsahuje metoda ROW NUMBER () chronologické číslo pro každý řádek uvnitř oddílu. Je to jen funkce okna. Obrázek řádků začíná na 1 číslem řádků v oddílu. Pamatujte, že před verzí 8.0 MySQL nepovoluje funkci ROW NUMBER (), ale nabízí proměnnou relace, která pomáhá tuto funkci napodobit. V této příručce porozumíme více funkcím MySQL ROW NUMBER () a vytvoříme pořadové číslo pro každý řádek v kolekci výsledků. V MySQL se metody ROW_NUMBER () používají s následujícími klauzulemi:

  • V něm bude použita klauzule Over ().
  • Klauzule ORDERS BY uspořádá výsledek podle pořadí řazení uvedeného sloupce.

Syntax:

>> VYBRAT col_name,ŘADA_NUMBER()PŘES( ROZDĚLIT BY col_name, SEŘADIT PODLE col_name) TAK JAKO řádek_číslo Z název_tabulky;

Otevřeme klientský shell příkazového řádku MySQL z aplikací a zadáme heslo pro přihlášení.









Chcete -li začít pracovat na funkci čísla řádku, musíte vytvořit novou tabulku nebo použít výchozí tabulku. Jak je znázorněno na obrázku níže, máme v datech schématu tabulku zvířat s několika záznamy. Pojďme načíst jeho záznamy pomocí instrukce SELECT.



>> VYBRAT * Z data .zvířata;





Příklad 01: ROW_NUMBER () pomocí klauzule ORDER BY

Stejnou tabulku použijeme ke zpracování některých příkladů funkce čísla řádku. Bereme příklad funkce ROW_NUMBER () následované Over (), přičemž používáme pouze klauzuli ORDER BY. Načítali jsme všechny záznamy při číslování řádků podle sloupce Cena. Sloupci, který bude ukládat čísla řádku, jsme dali název row_num. Pokusme se o to pomocí níže uvedeného příkazu.

>> VYBRAT *,ŘADA_NUMBER()PŘES( SEŘADIT PODLE Cena) TAK JAKO řádek_číslo Z data .zvířata;

Po provedení výše uvedeného dotazu vidíme, že řádky byly přiřazeny čísly podle pořadí řazení ve sloupci Cena. Můžete si myslet, že některé menší ceny by měly být v horní části sloupce a podle toho by se měly řadit. Klauzule ORDER BY ale vidí pouze první číslici nebo abecedu sloupce k seřazení hodnot.



Spusťme stejný dotaz následovaný klauzulí ORDER BY při použití pořadí řazení ve sloupci Age. Výstup bude uveden podle sloupce Věk.

>> VYBRAT *,ŘADA_NUMBER()PŘES( SEŘADIT PODLE Stáří) TAK JAKO řádek_číslo Z data .zvířata;

Příklad 02: ROW_NUMBER () pomocí klauzule PARTITION BY

Ke kontrole výsledků použijeme jedinou klauzuli PARTITION BY v dotazu ROW_NUMBER (). Použili jsme dotaz SELECT k načtení záznamů následovaných klauzulí ROW_NUMBER () a OVER, přičemž tabulku rozdělíme podle sloupce Color. Spusťte níže uvedený příkaz v příkazovém prostředí.

>> VYBRAT *,ŘADA_NUMBER()PŘES( ROZDĚLIT PODLE barvy) TAK JAKO řádek_číslo Z data .zvířata;

Na výsledku vidíte, že číslování řádků bylo přiřazeno v oddílech podle pořadí třídění barev. Protože máme 4 hodnoty pro barvu Černá, která má 4 řádky. Proto má čtyřřadá čísla od 1 do 4 a naopak.

Zkuste tentýž příklad, tentokrát rozdělený podle sloupce Pohlaví. Jak víme, v této tabulce máme pouze dvě pohlaví, proto se vytvoří 2 oddíly. Samice zaujímají 9 řádků, proto má číslování řádků od 1 do 9. Zatímco muži mají 8 hodnot, proto má 1 až 8.

>> VYBRAT *,ŘADA_NUMBER()PŘES( ROZDĚLIT PODLE pohlaví) TAK JAKO řádek_číslo Z data .zvířata;

Příklad 03: ROW_NUMBER () pomocí PARTITION BY & ORDER BY

Výše uvedené dva příklady jsme provedli v příkazovém řádku MySQL, nyní je čas udělat příklad ROW_NUMBER () v MySQL Workbench 8.0. Otevřete tedy MySQL Workbench 8.0 z aplikací. Začněte pracovat propojením MySQL Workbench s místní hostitelskou kořenovou databází.

Na levé straně MySQL Workbench najdete lištu Schema, vyhodit navigátor. Na této liště schémat najdete seznam databází. V seznamu databází budete mít různé tabulky a uložené procedury, jak můžete vidět na následujícím obrázku. V naší databázi „dat“ máme různé tabulky. Otevřeme tabulku „order1“ pomocí příkazu SELECT v oblasti dotazu, abychom ji mohli začít používat pro implementaci funkce ROW_NUMBER ().

>> VYBRAT * Z data .řád1;

Pořadí tabulky 1 bylo zobrazeno v mřížkovém zobrazení, jak je uvedeno níže. Můžete vidět, že má 4 sloupcová pole, ID, Region, Stav a Číslo objednávky. Budeme načítat všechny záznamy této tabulky při použití klauzule ORDER BY a PARTITION BY, a to současně.

Do oblasti dotazu MySQL Workbench 8.0 zadejte níže zobrazený dotaz. Dotaz byl spuštěn pomocí klauzule SELECT, načítání všech záznamů následovaných funkcí ROW_NUMBER () spolu s klauzulí OVER. Po klauzuli OVER jsme zadali sloupec Status postupovaný příkazem PARTITION BY k rozdělení tabulky na oddíly podle této tabulky. Klauzule ORDER BY byla použita k uspořádání tabulky sestupně podle sloupce Region. Čísla řádků budou zachována ve sloupci row_num. Tento příkaz spustíte klepnutím na ikonu blesku.

Zobrazí se níže zobrazený výsledek. Nejprve je tabulka rozdělena na dvě části podle hodnot sloupce Stav. Poté byl zobrazen v sestupném pořadí ve sloupci „Region“ a oddíly byly přiřazeny čísly řádků.

Závěr:

Nakonec jsme dokončili všechny potřebné příklady používání funkce ROW_NUMBER () v MySQL Workbench a MySQL Command-line Client Shell.