Funkcia okna čísla riadka MySQL

Mysql Row Number Window Function



V rámci MySQL metóda ROW NUMBER () obsahuje chronologické číslo pre každý riadok v rámci oblasti. Je to len nejaká funkcia okna. Obrázok riadkov začína číslom 1 číslom riadkov v rámci oddielu. Pamätajte si, že pred verziou 8.0 MySQL nepovoľuje funkciu ROW NUMBER (), ale ponúka premennú relácie, ktorá pomáha imitovať túto funkciu. V tejto príručke porozumieme viac o funkcii MySQL ROW NUMBER () a vytvoríme poradové číslo pre každý riadok v zbierke výsledkov. V MySQL sa metódy ROW_NUMBER () používajú s nasledujúcimi doložkami:

  • V ňom bude použitá klauzula Over ().
  • Klauzula ORDERS BY usporiada výsledok podľa poradia zoradenia v uvedenom stĺpci.

Syntax:

>> VYBERTE col_name,ROW_NUMBER()NADŽIŤ( ROZDELENIE BY col_name, ZORADIŤ PODĽA col_name) AS riadok_číslo OD názov_tabulky;

Otvorme z aplikácií shell klienta príkazového riadka MySQL a zadajte heslo na prihlásenie.









Ak chcete začať pracovať s funkciou čísla riadka, musíte vytvoriť novú tabuľku alebo použiť predvolenú tabuľku. Ako je znázornené na obrázku nižšie, v údajoch schémy máme tabuľku zvierat s niektorými záznamami. Načítajme jeho záznamy pomocou inštrukcie SELECT.



>> VYBERTE * OD údaje .zvieratá;





Príklad 01: ROW_NUMBER () pomocou klauzuly ORDER BY

Rovnakú tabuľku použijeme na vypracovanie niektorých príkladov funkcie čísla riadka. Berieme príklad funkcie ROW_NUMBER (), za ktorou nasleduje Over (), pričom používame iba klauzulu ORDER BY. Načítavali sme všetky záznamy pri číslovaní riadkov podľa stĺpca Cenový poriadok. Dali sme názov row_num stĺpcu, ktorý bude ukladať čísla riadkov. Skúsme to urobiť pomocou nižšie uvedeného príkazu.

>> VYBERTE *,ROW_NUMBER()NADŽIŤ( ZORADIŤ PODĽA cena) AS riadok_číslo OD údaje .zvieratá;

Po vykonaní vyššie uvedeného dotazu vidíme, že riadkom boli priradené čísla podľa poradia zoradenia v stĺpci Cena. Môžete si myslieť, že niektoré menšie ceny by mali byť v hornej časti stĺpca a podľa toho by sa mali triediť. Klauzula ORDER BY však na zoradenie hodnôt vidí iba prvú číslicu alebo abecedu stĺpca.



Vykonajme rovnaký dotaz, za ktorým nasleduje klauzula ORDER BY, pričom použijeme poradie zoradenia v stĺpci Vek. Výstup bude uvedený podľa stĺpca Vek.

>> VYBERTE *,ROW_NUMBER()NADŽIŤ( ZORADIŤ PODĽA Vek) AS riadok_číslo OD údaje .zvieratá;

Príklad 02: ROW_NUMBER () pomocou klauzuly PARTITION BY

Na kontrolu výsledkov použijeme jedinú klauzulu PARTITION BY v dotaze ROW_NUMBER (). Na načítanie záznamov, ktoré nasledujú klauzulou ROW_NUMBER () a OVER, sme použili dotaz SELECT, pričom tabuľku rozdeľujeme podľa stĺpca Farba. Vykonajte nižšie uvedený príkaz v príkazovom shelle.

>> VYBERTE *,ROW_NUMBER()NADŽIŤ( ROZDELENIE PODĽA FARBY) AS riadok_číslo OD údaje .zvieratá;

Na výsledku môžete vidieť, že číslovanie riadkov bolo priradené do oddielov podľa poradia triedenia farieb. Pretože máme 4 hodnoty pre čiernu farbu, ktorá zaberá 4 riadky. Preto má štvorradové čísla od 1 do 4 a naopak.

Skúste ten istý príklad, tentokrát rozdelený podľa stĺpca Pohlavie. Ako vieme, v tejto tabuľke máme iba dve pohlavia, a preto sa vytvoria 2 oddiely. Samice zaberajú 9 riadkov, preto má číslovanie riadkov od 1 do 9. Kým muži majú 8 hodnôt, preto má 1 až 8.

>> VYBERTE *,ROW_NUMBER()NADŽIŤ( ROZDELENIE PODĽA pohlavia) AS riadok_číslo OD údaje .zvieratá;

Príklad 03: ROW_NUMBER () Použitie PARTITION BY & ORDER BY

Vyššie uvedené dva príklady sme urobili v príkazovom riadku MySQL, teraz je čas urobiť príklad ROW_NUMBER () v MySQL Workbench 8.0. Otvorte teda MySQL Workbench 8.0 z aplikácií. Začnite pracovať tak, že prepojíte MySQL Workbench s lokálnou koreňovou databázou hostiteľa.

Na ľavej strane MySQL Workbench nájdete lištu Schema, spustite navigátor. Na tejto lište schémy nájdete zoznam databáz. V zozname databáz budete mať rôzne tabuľky a uložené procedúry, ako vidíte na obrázku nižšie. V našej databáze „údajov“ máme rôzne tabuľky. Tabuľku „order1“ otvoríme pomocou príkazu SELECT v oblasti dotazov, aby sme ju začali používať na implementáciu funkcie ROW_NUMBER ().

>> VYBERTE * OD údaje .objednávka1;

Poradie tabuliek1 bolo zobrazené v mriežkovom zobrazení, ako je uvedené nižšie. Môžete vidieť, že má 4 stĺpce, id, región, stav a číslo objednávky. Načítame všetky záznamy z tejto tabuľky pri použití klauzule ORDER BY a PARTITION BY, oboch súčasne.

Do oblasti dotazu MySQL Workbench 8.0 zadajte nižšie zobrazený dotaz. Dotaz bol spustený klauzulou SELECT, pričom sa načítajú všetky záznamy, za ktorými nasleduje funkcia ROW_NUMBER () spolu s klauzulou OVER. Po klauzule OVER sme špecifikovali stĺpec Stav, za ktorým postupuje príkaz PARTITION BY, aby sa tabuľka rozdelila na oblasti podľa tejto tabuľky. Klauzula ORDER BY sa použila na usporiadanie tabuľky zostupne podľa stĺpca Region. Čísla riadkov budú ponechané v stĺpci row_num. Tento príkaz spustíte klepnutím na ikonu blesku.

Zobrazí sa nižšie uvedený výsledok. V prvom rade je tabuľka rozdelená na dve časti podľa hodnôt stĺpca Stav. Potom sa zobrazí v zostupnom poradí v stĺpci „Región“ a oddielom sa priradia čísla riadkov.

Záver:

Nakoniec sme dokončili všetky potrebné príklady použitia funkcie ROW_NUMBER () v nástrojoch MySQL Workbench a MySQL Command-line Client Shell.