Funció de la finestra del número de fila MySQL

Mysql Row Number Window Function



Dins de MySQL, un mètode ROW NUMBER () conté un número cronològic per a cada fila de la partició. És només una característica de la finestra. La figura de files comença a 1 amb la figura de files dins de la partició. Recordeu, abans de la versió 8.0, MySQL no permet la funció ROW NUMBER (), però ofereix una variable de sessió que ajuda a imitar aquesta funció. En aquesta guia coneixerem més sobre la funcionalitat MySQL ROW NUMBER () i produirem un número consecutiu per a cada fila de la col·lecció de resultats. A MySQL, s’utilitzen els mètodes ROW_NUMBER () amb les clàusules següents:

  • S’utilitzarà la clàusula Over ().
  • La clàusula ORDERS BY organitza el resultat segons l'ordre de classificació de la columna esmentada.

Sintaxi:

>> SELECCIONA nom_col,ROW_NUMBER()FINALITZAT( PARTICIÓ BY nom_col, DEMANAT PER nom_col) AS fila_numre DE nom_tabla;

Obrim el shell de client de línia de comandes MySQL des de les aplicacions i escrivim la contrasenya per iniciar la sessió.









Heu de crear una taula nova o utilitzar la taula per defecte per començar a treballar amb la funció de número de fila. Tal com es presenta a la imatge següent, tenim una taula d'animals a les dades de l'esquema amb alguns registres. Recuperem els seus registres mitjançant la instrucció SELECT.



>> SELECCIONA * DE dades .animals;





Exemple 01: ROW_NUMBER () mitjançant la clàusula ORDER BY

Utilitzarem la mateixa taula per detallar alguns exemples de la funció de número de fila. Estem prenent un exemple de la funció ROW_NUMBER () seguit de Over (), mentre que només utilitzem la clàusula ORDER BY. Hem estat recuperant tots els registres mentre numeràvem les files segons la columna Ordre de preus. Hem assignat el nom fila_num a una columna que emmagatzemarà els números de la fila. Proveu l'ordre següent per fer-ho.

>> SELECCIONA *,ROW_NUMBER()FINALITZAT( DEMANAT PER Preu) AS fila_numre DE dades .animals;

En executar la consulta anterior, podem veure que les files s’han assignat amb números segons l’ordre d’ordenació de la columna Preu. Podríeu pensar que alguns preus més petits haurien d’estar a la part superior de la columna i haurien d’ordenar-se segons això. Però la clàusula ORDER BY només veu el primer dígit o alfabet de la columna per ordenar els valors.



Executem la mateixa consulta seguida de la clàusula ORDER BY mentre fem servir l’ordre d’ordenació de la columna Edat. La sortida es donarà segons la columna Edat.

>> SELECCIONA *,ROW_NUMBER()FINALITZAT( DEMANAT PER Edat) AS fila_numre DE dades .animals;

Exemple 02: ROW_NUMBER () Utilitzant clàusula PARTITION BY

Utilitzarem l’única clàusula PARTITION BY de la consulta ROW_NUMBER () per comprovar els resultats. Hem utilitzat la consulta SELECT per obtenir els registres seguits de la clàusula ROW_NUMBER () i OVER, mentre es particionava la taula segons la columna Color. Executeu l'ordre adjunta a sota a l'intèrpret d'ordres.

>> SELECCIONA *,ROW_NUMBER()FINALITZAT( PARTICIÓ PER Color) AS fila_numre DE dades .animals;

Podeu veure al resultat que la numeració de files s'ha assignat en particions, segons l'ordre de classificació dels colors. Com que tenim 4 valors per al color Negre que ocupa 4 files. Per això, té números de quatre files que van de l’1 al 4 i viceversa.

Proveu el mateix exemple, particionat per la columna Sexe aquesta vegada. Com sabem, només tenim dos gèneres en aquesta taula, per això es formaran 2 particions. Les femelles ocupen 9 files, per això té una numeració de files de l’1 al 9. Mentre que els mascles tenen 8 valors, per això en té de l’1 al 8.

>> SELECCIONA *,ROW_NUMBER()FINALITZAT( PARTICIÓ PER Gènere) AS fila_numre DE dades .animals;

Exemple 03: ROW_NUMBER () Utilitzant PARTITION BY i ORDER BY

Hem fet els dos exemples anteriors a la línia d'ordres MySQL, ara és hora de fer l'exemple ROW_NUMBER () al MySQL Workbench 8.0. Per tant, obriu MySQL Workbench 8.0 des de les aplicacions. Connecteu el MySQL Workbench amb la base de dades arrel de l’amfitrió local per començar a treballar.

A la part esquerra del MySQL Workbench, trobareu la barra d’esquema, feu volar el navegador. En aquesta barra d’esquemes, trobareu la llista de bases de dades. A la llista de bases de dades, tindreu diferents taules i procediments emmagatzemats, tal com podeu veure a la imatge següent. Tenim diferents taules a la nostra base de dades ‘dades’. Obrirem la taula 'ordre1' mitjançant l'ordre SELECT a l'àrea de consulta per començar a utilitzar-la per a la implementació de la funció ROW_NUMBER ().

>> SELECCIONA * DE dades .ordre1;

L'ordre de la taula1 s'ha mostrat a la vista de quadrícula, tal com es mostra a continuació. Podeu veure que té 4 camps de columna, identificador, regió, estat i número de comanda. Recuperarem tots els registres d’aquesta taula mentre utilitzem les clàusules ORDER BY i PARTITION BY, ambdues alhora.

A l’àrea de consulta de MySQL Workbench 8.0, escriviu la consulta que es mostra a continuació. La consulta s'ha iniciat amb la clàusula SELECT, obtenint tots els registres seguits de la funció ROW_NUMBER () juntament amb la clàusula OVER. Després de la clàusula OVER, hem especificat la columna Estat procedida per la sentència PARTITION BY per dividir la taula en particions segons aquesta taula. La clàusula ORDER BY s'ha utilitzat per ordenar la taula de manera descendent segons la columna Regió. Els números de fila es mantindran a la columna fila_num. Toqueu la icona del flaix per executar aquesta ordre.

Es mostrarà el resultat que es mostra a continuació. En primer lloc, la taula s'ha separat en dues parts segons els valors de la columna Estat. Després, s'ha presentat en l'ordre descendent de la columna 'Regió' i les particions s'han assignat amb els números de fila.

Conclusió:

Finalment, hem completat tots els exemples necessaris per utilitzar la funció ROW_NUMBER () a MySQL Workbench i MySQL Client Shell de línia de comandes.