Función de ventana de número de fila de MySQL

Mysql Row Number Window Function



Dentro de MySQL, un método ROW NUMBER () contiene un número cronológico para cada fila dentro de la partición. Es solo una característica de la ventana de algún tipo. La figura de filas comienza en 1 con la figura de filas dentro de la partición. Recuerde, antes de la versión 8.0, MySQL no permite la función ROW NUMBER () sin embargo, ofrece una variable de sesión que ayuda a imitar esta característica. Comprenderemos más sobre la funcionalidad NÚMERO DE FILA () de MySQL a lo largo de esta guía y produciremos un número consecutivo para cada fila en la colección de resultados. En MySQL, los métodos ROW_NUMBER () se utilizan con las cláusulas siguientes:

  • La cláusula Over () se utilizará dentro de él.
  • La cláusula ORDERS BY organiza el resultado de acuerdo con el orden de clasificación de la columna mencionada.

Sintaxis:

>> SELECCIONE col_name,NUMERO DE FILA()SOBRE( DIVIDIR POR col_name, ORDENAR POR col_name) COMO núm_fila DE nombre de la tabla;

Abramos el shell del cliente de línea de comandos de MySQL desde las aplicaciones y escriba la contraseña para iniciar sesión.









Debe crear una nueva tabla o usar la tabla predeterminada para comenzar a trabajar en la función de número de fila. Como se muestra en la siguiente imagen, tenemos una tabla de animales en los datos del esquema con algunos registros. Busquemos sus registros usando la instrucción SELECT.



>> SELECCIONE * DE datos .animales;





Ejemplo 01: ROW_NUMBER () con la cláusula ORDER BY

Usaremos la misma tabla para desarrollar algunos ejemplos de la función de número de fila. Estamos tomando un ejemplo de la función ROW_NUMBER () seguida de Over (), mientras que solo usamos la cláusula ORDER BY. Hemos estado obteniendo todos los registros mientras numeramos las filas de acuerdo con la columna Orden de precio. Le hemos dado el nombre row_num a una columna, que almacenará los números de la fila. Intentemos el siguiente comando para hacerlo.

>> SELECCIONE *,NUMERO DE FILA()SOBRE( ORDENAR POR Precio) COMO núm_fila DE datos .animales;

Al ejecutar la consulta anterior, podemos ver que las filas han sido asignadas con números según el orden de clasificación de la columna Precio. Podría pensar que algunos precios más pequeños deberían estar en la parte superior de la columna y deberían ordenarse de acuerdo con eso. Pero la cláusula ORDER BY solo ve el primer dígito o alfabeto de la columna para ordenar los valores.



Ejecutemos la misma consulta seguida de la cláusula ORDER BY mientras usamos el orden de clasificación de la columna Edad. La salida se dará según la columna Edad.

>> SELECCIONE *,NUMERO DE FILA()SOBRE( ORDENAR POR La edad) COMO núm_fila DE datos .animales;

Ejemplo 02: ROW_NUMBER () con la cláusula PARTITION BY

Usaremos la única cláusula PARTITION BY en la consulta ROW_NUMBER () para verificar los resultados. Hemos estado usando la consulta SELECT para obtener los registros seguidos de ROW_NUMBER () y la cláusula OVER, mientras particionamos la tabla de acuerdo con la columna Color. Ejecute el comando adjunto a continuación en el shell de comandos.

>> SELECCIONE *,NUMERO DE FILA()SOBRE( DIVIDIR POR color) COMO núm_fila DE datos .animales;

Puede ver en el resultado que la numeración de filas se ha asignado en particiones, de acuerdo con el orden de clasificación de los colores. Como tenemos 4 valores para el color Negro que toma 4 filas. Por eso tiene números de cuatro filas que comienzan del 1 al 4 y viceversa.

Pruebe el mismo ejemplo, esta vez dividido por la columna Sexo. Como sabemos, solo tenemos dos géneros en esta tabla, por eso se formarán 2 particiones. Las hembras ocupan 9 filas, por eso tiene una numeración de filas del 1 al 9. Mientras que los machos tienen 8 valores, por eso tiene del 1 al 8.

>> SELECCIONE *,NUMERO DE FILA()SOBRE( DIVIDIR Por género) COMO núm_fila DE datos .animales;

Ejemplo 03: ROW_NUMBER () usando PARTITION BY & ORDER BY

Hemos hecho los dos ejemplos anteriores en la línea de comandos de MySQL, ahora es el momento de hacer el ejemplo ROW_NUMBER () en MySQL Workbench 8.0. Entonces, abra MySQL Workbench 8.0 desde las aplicaciones. Conecte MySQL Workbench con la base de datos raíz del host local para comenzar a trabajar.

En el lado izquierdo de MySQL Workbench, encontrará la barra de esquema, sople el navegador. En esta barra de esquema, encontrará la lista de bases de datos. Debajo de la lista de bases de datos, tendrá diferentes tablas y procedimientos almacenados, como puede ver en la imagen de abajo. Tenemos diferentes tablas en nuestra base de datos de 'datos'. Abriremos la tabla 'order1' usando el comando SELECT en el área de consulta para comenzar a usarla para la implementación de la función ROW_NUMBER ().

>> SELECCIONE * DE datos .order1;

El orden de la tabla1 se ha mostrado en la vista de cuadrícula como se muestra a continuación. Puede ver que tiene 4 campos de columna, id, región, estado y número de pedido. Obtendremos todos los registros de esta tabla mientras usamos la cláusula ORDER BY y PARTITION BY, ambas al mismo tiempo.

En el área de consulta de MySQL Workbench 8.0, escriba la consulta que se muestra a continuación. La consulta se ha iniciado con la cláusula SELECT, obteniendo todos los registros seguidos de la función ROW_NUMBER () junto con la cláusula OVER. Después de la cláusula OVER, hemos especificado el estado de la columna precedido por la instrucción PARTITION BY para dividir la tabla en particiones de acuerdo con esta tabla. La cláusula ORDER BY se ha utilizado para organizar la tabla en forma descendente según la columna Región. Los números de fila se mantendrán en la columna row_num. Toque el icono de flash para ejecutar este comando.

Se mostrará el resultado que se muestra a continuación. En primer lugar, la tabla se ha segregado en dos partes según los valores de la columna Estado. Después de eso, se ha presentado en orden descendente de la columna 'Región' y las particiones se han asignado con los números de fila.

Conclusión:

Finalmente, hemos completado todos los ejemplos necesarios en el uso de la función ROW_NUMBER () en MySQL Workbench y MySQL Command-line Client Shell.