Cómo cambiar la forma de la tabla para convertir filas en columnas en MySQL

MySQL es uno de los sistemas de gestión de bases de datos relacionales más populares del mundo. MySQL nos permite almacenar, gestionar y analizar datos en forma tabular. Una tabla consta de filas y columnas que representan entidades y atributos de datos. Sin embargo, a veces necesitamos cambiar la forma de la tabla para convertir filas en columnas o viceversa. Esto se conoce como transposición de tablas.

Las tablas de transposición pueden ser útiles por varias razones, tales como:

  • Simplifique la visualización y la comprensión de los datos
  • Optimice el rendimiento de las consultas y los índices
  • Adapte las estructuras de datos a las necesidades empresariales o de las aplicaciones
  • Realizar operaciones de agregación o cálculo de datos
script mysql

Sin embargo, MySQL no tiene una función incorporada para transponer tablas directamente. Por lo tanto, necesitamos utilizar ciertas técnicas o trucos para lograr este objetivo. En este artículo, discutiremos varias formas de cambiar la forma de una tabla para convertir filas en columnas en MySQL, junto con ejemplos y explicaciones.

Método 1: Uso de la función de agregación y la cláusula GROUP BY

Una forma de cambiar la forma de una tabla para convertir filas en columnas en MySQL es usar la función de agregación y la cláusula GROUP BY. Una función de agregación es una función que toma un conjunto de valores como entrada y devuelve un único valor como salida. Algunas funciones de agregación comúnmente utilizadas en MySQL son:

  • SUM(): Calcula el número total de un conjunto de valores
  • AVG(): Calcula el promedio de un conjunto de valores
  • MIN(): Devuelve el valor más pequeño de un conjunto de valores
  • MAX(): Devuelve el valor más grande de un conjunto de valores
  • COUNT(): Cuenta el número de valores presentes en un conjunto de valores

Una cláusula GROUP BY es una cláusula que se utiliza para agrupar filas que tienen el mismo valor en una o varias columnas. La cláusula GROUP BY se utiliza normalmente junto con una función de agregación para calcular los valores agregados de cada grupo.

Para cambiar el formulario de la tabla para convertir filas en columnas mediante la función de agregación y la cláusula GROUP BY, debemos realizar los siguientes pasos:

  • Especifique la columna que será la nueva fila en la tabla de resultados. Esta columna suele ser una columna que tiene diferentes valores y no demasiados. Por ejemplo, columnas de año, mes, categoría, tipo, etc.
  • Especifique la columna que será la nueva columna en la tabla de resultados. Esta columna suele ser una columna que tiene el mismo valor o un valor limitado para cada fila. Por ejemplo, las columnas nombre, producto, marca, etc.
  • Especifique la función de agregación que se utilizará para calcular el valor de cada nueva combinación de filas y columnas. Esta función de agregación depende del tipo de datos y del propósito de nuestro análisis. Por ejemplo, SUM(), AVG(), MIN(), MAX(), etc.
  • Cree una consulta SQL que utilice la función de agregación y la cláusula GROUP BY para devolver la tabla de resultados deseada.

Veamos un ejemplo para entenderlo mejor. Supongamos que tenemos la siguiente tabla que almacena los datos de ventas de productos para cada mes y categoría:

monthcategorysales
JanA100
JanB200
JanC300
FebA150
FebB250
FebC350
MarA200
MarB300
MarC400

Esta tabla tiene tres columnas: mes, categoría y ventas. Queremos cambiar la forma de esta tabla para convertir filas en columnas, de modo que podamos ver las ventas totales de cada categoría y mes en una tabla. La tabla de resultados que queremos es la siguiente:

categoryJanFebMar
A100150200
B200250300
C300350400

Para lograr este objetivo, podemos utilizar la forma 1 con los siguientes pasos:

  • Especifique la columna que será la nueva fila en la tabla de resultados. En este caso, la columna de categoría será una nueva fila, porque tiene valores diferentes y no demasiados (A, B, C).
  • Especifique la columna que será la nueva columna en la tabla de resultados. En este caso, la columna del mes será la nueva columna, ya que tiene el mismo valor o un valor limitado para cada fila (enero, febrero, marzo).
  • Especifique la función de agregación que se utilizará para calcular el valor de cada nueva combinación de filas y columnas. En este caso, usaremos la función SUM() para calcular las ventas totales de cada categoría y mes.
  • Cree una consulta SQL que utilice la función de agregación y la cláusula GROUP BY para devolver la tabla de resultados deseada. Las consultas SQL que podemos utilizar son las siguientes:
SELECT
category,
SUM(CASE WHEN month = 'Jan' THEN sales ELSE 0 END) AS Jan,
SUM(CASE WHEN month = 'Feb' THEN sales ELSE 0 END) AS Feb,
SUM(CASE WHEN month = 'Mar' THEN sales ELSE 0 END) AS Mar
FROM
sales_table
GROUP BY
category;

Esta consulta hace lo siguiente:

  • Seleccione la columna de categoría de la tabla sales_table
  • Utilice las funciones SUM() y CASE para calcular las ventas totales de cada categoría y mes. CASE es una instrucción condicional que devuelve un valor basado en una condición dada. En esta consulta, usamos CASE para verificar el valor mensual y devolver el valor de ventas si corresponde, o 0 si no. Por ejemplo, SUM(CASE WHEN month = ‘Jan’ THEN sales ELSE 0 END) devolverá las ventas totales de enero para cada categoría, o 0 si no hay ventas para ese mes.
  • Asigne un nombre de alias a cada nueva columna mediante AS. Alias es un nombre alternativo que podemos dar a una columna o tabla para facilitar la escritura y lectura de una consulta. En esta consulta, asignamos un nombre de alias a cada nueva columna con un nombre de mes correspondiente, como enero, febrero y marzo.
  • Utilice la cláusula GROUP BY para agrupar filas por la columna de categoría. La cláusula GROUP BY crea una fila para cada valor único de la columna de categoría y calcula un valor agregado para cada dos columnas.

Esta consulta generará la tabla de resultados que queremos, como se muestra arriba.

Artículos más recientes