Funzione della finestra del numero di riga di MySQL

Mysql Row Number Window Function



All'interno di MySQL, un metodo ROW NUMBER() contiene un numero cronologico per ogni riga all'interno della partizione. È solo una funzione della finestra di qualche tipo. La cifra delle righe inizia da 1 con la cifra delle righe all'interno della partizione. Ricorda, prima della versione 8.0, MySQL non consente la funzione ROW NUMBER(), tuttavia offre una variabile di sessione che aiuta a imitare questa funzione. Capiremo di più sulla funzionalità di MySQL ROW NUMBER() in questa guida e produrremo un numero consecutivo per ogni riga nella raccolta dei risultati. In MySQL, i metodi ROW_NUMBER() vengono utilizzati con le clausole successive:

  • La clausola Over() verrà utilizzata al suo interno.
  • La clausola ORDERS BY organizza il risultato secondo l'ordinamento della colonna menzionata.

Sintassi:

>> SELEZIONARE col_name,RIGA_NUMERO()TERMINATO( PARTIZIONE BY col_name, ORDINATO DA col_name) COME numero_riga A PARTIRE DAL nome_tabella;

Apriamo la shell del client da riga di comando MySQL dalle applicazioni e digitiamo la password per accedere.









Devi creare una nuova tabella o utilizzare la tabella predefinita per iniziare a lavorare sulla funzione del numero di riga. Come presentato nell'immagine sottostante, abbiamo una tabella animali nei dati dello schema con alcuni record al suo interno. Recuperiamo i suoi record usando l'istruzione SELECT.



>> SELEZIONARE * A PARTIRE DAL dati .animali;





Esempio 01: ROW_NUMBER() Utilizzo della clausola ORDER BY

Useremo la stessa tabella per elaborare alcuni esempi della funzione del numero di riga. Stiamo prendendo un esempio della funzione ROW_NUMBER() seguita da Over(), usando solo la clausola ORDER BY. Abbiamo recuperato tutti i record durante la numerazione delle righe in base alla colonna Ordine prezzo. Abbiamo dato il nome row_num a una colonna, che memorizzerà i numeri della riga. Proviamo il comando seguente per farlo.

>> SELEZIONARE *,RIGA_NUMERO()TERMINATO( ORDINATO DA Prezzo) COME numero_riga A PARTIRE DAL dati .animali;

Dopo aver eseguito la query di cui sopra, possiamo vedere che le righe sono state assegnate con numeri secondo l'ordine di ordinamento della colonna Prezzo. Potresti pensare che alcuni prezzi più piccoli dovrebbero essere nella parte superiore della colonna e che dovrebbero essere ordinati in base a ciò. Ma la clausola ORDER BY vede solo la prima cifra o alfabeto della colonna per ordinare i valori.



Eseguiamo la stessa query seguita dalla clausola ORDER BY utilizzando l'ordinamento della colonna Age. L'output sarà dato secondo la colonna Età.

>> SELEZIONARE *,RIGA_NUMERO()TERMINATO( ORDINATO DA Età) COME numero_riga A PARTIRE DAL dati .animali;

Esempio 02: ROW_NUMBER() Utilizzo della clausola PARTITION BY

Useremo l'unica clausola PARTITION BY nella query ROW_NUMBER() per controllare i risultati. Abbiamo utilizzato la query SELECT per recuperare i record seguiti dalla clausola ROW_NUMBER() e OVER, mentre partizionavamo la tabella in base alla colonna Color. Eseguire il comando allegato di seguito nella shell dei comandi.

>> SELEZIONARE *,RIGA_NUMERO()TERMINATO( PARTIZIONE PER Colore) COME numero_riga A PARTIRE DAL dati .animali;

Puoi vedere nel risultato che la numerazione delle righe è stata assegnata nelle partizioni, secondo l'ordine di ordinamento dei colori. Poiché abbiamo 4 valori per il colore Nero che richiede 4 righe. Ecco perché ha numeri di quattro righe che iniziano da 1 a 4 e viceversa.

Prova lo stesso esempio, questa volta partizionato dalla colonna Genere. Come sappiamo, in questa tabella abbiamo solo due generi, ecco perché verranno formate 2 partizioni. Le femmine occupano 9 righe, ecco perché ha la numerazione delle righe da 1 a 9. Mentre i maschi hanno 8 valori, ecco perché ha da 1 a 8.

>> SELEZIONARE *,RIGA_NUMERO()TERMINATO( PARTIZIONE PER Genere) COME numero_riga A PARTIRE DAL dati .animali;

Esempio 03: ROW_NUMBER() Utilizzo di PARTITION BY & ORDER BY

Abbiamo eseguito i due esempi precedenti nella riga di comando di MySQL, ora è il momento di eseguire l'esempio ROW_NUMBER() in MySQL Workbench 8.0. Quindi, apri MySQL Workbench 8.0 dalle applicazioni. Connetti MySQL Workbench con il database root dell'host locale per iniziare a lavorare.

Sul lato sinistro di MySQL Workbench, troverai la barra dello schema, fai saltare il navigatore. In questa barra dello schema troverai l'elenco dei database. Sotto l'elenco dei database, avrai diverse tabelle e stored procedure, come puoi vedere nell'immagine qui sotto. Abbiamo diverse tabelle nei 'dati' del nostro database. Apriremo la tabella 'order1' utilizzando il comando SELECT nell'area delle query per iniziare a utilizzarla per l'implementazione della funzione ROW_NUMBER().

>> SELEZIONARE * A PARTIRE DAL dati .ordine1;

L'ordine della tabella1 è stato visualizzato nella vista griglia come mostrato di seguito. Puoi vedere che ha 4 campi colonna, ID, Regione, Stato e OrderNo. Recupereremo tutti i record di questa tabella utilizzando le clausole ORDER BY e PARTITION BY, entrambe contemporaneamente.

Nell'area delle query di MySQL Workbench 8.0, digita la query visualizzata di seguito. La query è stata avviata con la clausola SELECT, recuperando tutti i record seguiti dalla funzione ROW_NUMBER() insieme alla clausola OVER. Dopo la clausola OVER, abbiamo specificato la colonna Status seguita dall'istruzione PARTITION BY per dividere la tabella in partizioni secondo questa tabella. La clausola ORDER BY è stata utilizzata per disporre la tabella in modo decrescente secondo la colonna Region. I numeri di riga verranno mantenuti nella colonna row_num. Tocca l'icona del flash per eseguire questo comando.

Verrà mostrato il risultato visualizzato di seguito. Innanzitutto la tabella è stata segregata in due parti secondo i valori della colonna Status. Successivamente, è stato presentato nell'ordine decrescente della colonna 'Regione' e le partizioni sono state assegnate con i numeri di riga.

Conclusione:

Infine, abbiamo completato tutti gli esempi necessari nell'uso della funzione ROW_NUMBER() in MySQL Workbench e MySQL Command-line Client Shell.