Convertir Filas a Columnas en MySQL
- Crear un conjunto de datos en MySQL
-
Convierta filas en columnas en MySQL usando la instrucción
CASE
-
Convierta filas en columnas en MySQL usando la instrucción
IF
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
yVeron_Present
con la palabra claveAS
.
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.