MySQL MariaDB

Funkce okna s číslem řádku MySQL

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

Syntax:

>> SELECT col_name, ROW_NUMBER () OVER (PARTITION BY col_name, ORDER BY col_name) AS row_num FROM table_name;

Otevřeme z aplikací klientský shell příkazového řádku MySQL a zadejte 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 následujícím obrázku, máme ve schématu „data“ tabulku „zvířata“ s několika záznamy. Načtěte jeho záznamy pomocí instrukce SELECT.

>> SELECT * FROM data.zvířata;

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

Ve stejné tabulce použijeme několik příkladů funkce čísla řádku. Bereme příklad funkce ROW_NUMBER () následované Over (), zatímco používáme pouze klauzuli ORDER BY. Načítali jsme všechny záznamy a číslovali jsme řádky podle pořadí ve sloupci „Cena“. Pojmenovali jsme název „row_num“ sloupci, který bude ukládat čísla řádků. Zkusme to pomocí následujícího příkazu.

>> SELECT *, ROW_NUMBER () OVER (ORDER BY Price) AS row_num FROM data.zvířata;

Po provedení výše uvedeného dotazu vidíme, že řádky byly přiřazeny čísly podle pořadí řazení sloupce „Cena“. Možná si myslíte, že některé menší ceny by měly být v horní části sloupce a podle toho by se to mělo třídit. Ale klauzule ORDER BY vidí pouze první číslici nebo abecedu sloupce, aby seřadily hodnoty.

Pojďme provést stejný dotaz následovaný klauzulí ORDER BY při použití pořadí řazení sloupce „Věk“. Výstup bude uveden podle sloupce „Věk“.

>> SELECT *, ROW_NUMBER () OVER (ORDER BY Age) AS row_num FROM data.zvířata;

Příklad 02: ROW_NUMBER () Použití klauzule PARTITION BY

Ke kontrole výsledků budeme používat 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, zatímco jsme rozdělili tabulku podle sloupce „Barva“. Proveďte připojený níže uvedený příkaz v příkazovém prostředí.

>> SELECT *, ROW_NUMBER () OVER (PARTITION BY Color) AS row_num FROM data.zvířata;

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

Zkuste stejný příklad, tentokrát rozdělený do sloupců „Pohlaví“. Jak víme, v této tabulce máme pouze dvě pohlaví, proto budou vytvořeny 2 oddíly. Ženy zabírají 9 řádků, proto má číslování řádků od 1 do 9. Zatímco muži mají 8 hodnot, proto má 1 až 8.

>> SELECT *, ROW_NUMBER () OVER (PARTITION BY Gender) AS row_num FROM data.zvířata;

Příklad 03: ROW_NUMBER () Použití 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. Takže otevřete MySQL Workbench 8.0 z aplikací. Připojte MySQL Workbench k místní kořenové databázi hostitele a začněte pracovat.

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

>> SELECT * FROM data.order1;

Tabulka „order1“ byla zobrazena v mřížce, jak je uvedeno níže. Můžete vidět, že má 4 sloupcová pole, id, Region, Status a OrderNo. Budeme načítat všechny záznamy této tabulky při použití klauzule ORDER BY a PARTITION BY, oba současně.

V oblasti dotazů MySQL Workbench 8.0, zadejte níže zobrazený dotaz. Dotaz byl spuštěn s klauzulí SELECT, načtením všech záznamů následovaných funkcí ROW_NUMBER () spolu s klauzulí OVER. Po klauzuli OVER jsme specifikovali sloupec „Stav“, který jsme provedli příkazem „PARTITION BY“, abychom rozdělili tabulku na oddíly podle této tabulky. Klauzule ORDER BY slouží k sestupnému uspořádání tabulky podle sloupce „Region“. Čísla řádků budou zachována ve sloupci „row_num“. Klepnutím na ikonu blesku provedete tento příkaz.

Zobrazí se níže zobrazený výsledek. Nejprve byla tabulka rozdělena na dvě části podle hodnot ve sloupci „Stav“. Poté byl uveden v sestupném pořadí ve sloupci Region a oddílům byla přiřazena čísla řádků.

Závěr:

Nakonec jsme dokončili všechny nezbytné příklady používání funkce ROW_NUMBER () v MySQL Workbench a klientském prostředí příkazového řádku MySQL.

Hry Top 5 karet pro zachycení hry
Top 5 karet pro zachycení hry
Všichni jsme viděli a milovali streamování her na YouTube. PewDiePie, Jakesepticye a Markiplier jsou jen někteří z nejlepších hráčů, kteří vydělali mi...
Hry Jak vyvíjet hru na Linuxu
Jak vyvíjet hru na Linuxu
Před deseti lety by jen málo uživatelů Linuxu předpovídalo, že jejich oblíbený operační systém bude jednoho dne populární herní platformou pro komerčn...
Hry Porty komerčních her s otevřeným zdrojovým kódem
Porty komerčních her s otevřeným zdrojovým kódem
Zdarma, s otevřeným zdrojovým kódem a multiplatformní herní enginy lze hrát staré i některé z poměrně nedávných herních titulů. Tento článek uvede sez...