Convertir Filas a Columnas en MySQL

Preet Sanghavi 20 junio 2023
  1. Crear un conjunto de datos en MySQL
  2. Convierta filas en columnas en MySQL usando la instrucción CASE
  3. Convierta filas en columnas en MySQL usando la instrucción IF
Convertir Filas a Columnas en MySQL

En este tutorial, aprenderemos cómo cambiar filas a columnas de una tabla en particular en MySQL.

Crear un conjunto de datos en MySQL

Con frecuencia se requiere obtener la información adecuada relacionada con los datos de fila necesarios que se muestran como columnas. Vamos a entender cómo hacer esto.

Sin embargo, antes de comenzar, crearemos un conjunto de datos ficticio para trabajar. Aquí, crearemos una tabla, student_details, junto con algunas filas.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName)
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

La consulta anterior crea una tabla y filas con los nombres y apellidos de los estudiantes. Para ver las entradas en los datos, usaremos el siguiente código:

SELECT * FROM student_details;

El código anterior daría el siguiente resultado:

stu_id  stu_firstName   stu_lastName
1         Preet         Sanghavi
2         Rich          John
3         Veron         Brow
4         Geo           Jos
5         Hash          Shah
6         Sachin        Parker
7         David         Miller

Convierta filas en columnas en MySQL usando la instrucción CASE

La sintaxis básica de la técnica CASE se puede ilustrar de la siguiente manera.

SELECT
column_name
    SUM(CASE WHEN stu_firstName = "Preet" THEN 1 ELSE 0 END) AS Preet_Present
   FROM
    table_name
    GROUP BY
column_name;

Ahora, verifiquemos si los estudiantes con los nombres Preet, Rich y Veron están presentes en la clase o no. Además, intentaremos mostrar los resultados de modo que las filas se conviertan en columnas utilizando la técnica mencionada anteriormente.

Esta operación se puede realizar mediante la siguiente consulta,

SELECT
stu_firstName,
    SUM(CASE WHEN stu_firstName = "Preet" THEN 1 ELSE 0 END) AS Preet_Present,
    SUM(CASE WHEN stu_firstName = "Rich" THEN 1 ELSE 0 END) AS Rich_Present,
    SUM(CASE WHEN stu_firstName = "Veron" THEN 1 ELSE 0 END) AS Veron_Present
   FROM
    student_details
    GROUP BY
stu_firstName;

Como podemos ver, en la consulta anterior, nuestro objetivo es convertir las filas en columnas como Preet_present, Rich_present y Veron_present. El resultado de la consulta mencionada anteriormente se ilustra a continuación.

SELECT DISTINCT
    COUNT(DISTINCT IF(stu_firstName like '%reet',
            stu_id,
            NULL)) AS count_student_ids
FROM student_details;

El código anterior cuenta el número de stu_id distintos de la tabla student_details, dado que stu_firstName termina con reet en la cláusula IF. La salida del código anterior es la siguiente:

stu_firstName   Preet_Present   Rich_Present Veron_Present
Preet           1                   0           0
Rich            0                   1           0
Veron           0                   0           1
Geo             0                   0           0
Hash            0                   0           0
Sachin          0                   0           0
David           0                   0           0

Nota: El código anterior usaba el alias Preet_Present, Rich_Present y Veron_Present con la palabra clave AS.

Una alternativa a la técnica CASE es la técnica IF que nos puede ayudar a conseguir resultados similares.

Convierta filas en columnas en MySQL usando la instrucción IF

Una declaración IF filtra datos en función de una condición particular o un conjunto de condiciones en MySQL. La sintaxis básica de convertir filas en columnas en MySQL utilizando la instrucción IF se puede ilustrar de la siguiente manera.

SELECT
column_name,
    SUM(IF(column_name= "something", do_this, else_do_this)) AS Preet_Present
   FROM
    table_name
    GROUP BY
column_name;

Como muestra la consulta anterior, realizamos la operación do_this cuando la condición IF devuelve True. Cuando la condición IF devuelve False, realizamos la operación else_do_this.

Podemos usar la consulta a continuación para nuestra tabla student_details para obtener el resultado deseado.

SELECT
stu_firstName,
    SUM(IF(stu_firstName = "Preet", 1, 0)) AS Preet_Present,
    SUM(IF(stu_firstName = "Rich",1,0)) AS Rich_Present,
    SUM(IF(stu_firstName = "Veron", 1,0)) AS Veron_Present
   FROM
    student_details
    GROUP BY
stu_firstName;

El resultado de la consulta anterior se puede ilustrar de la siguiente manera.

stu_firstName   Preet_Present   Rich_Present Veron_Present
Preet           1                   0           0
Rich            0                   1           0
Veron           0                   0           1
Geo             0                   0           0
Hash            0                   0           0
Sachin          0                   0           0
David           0                   0           0

Por lo tanto, con la ayuda de las declaraciones CASE e IF, podemos convertir de manera eficiente las filas en columnas en MySQL.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - MySQL Row

Artículo relacionado - MySQL Column