sql >> Base de Datos >  >> RDS >> Mysql

Cómo crear una tabla dinámica en MySQL

Las tablas dinámicas son útiles para el análisis de datos, le permiten mostrar valores de fila como columnas para obtener información fácilmente. Sin embargo, no existe una función para crear una tabla dinámica en MySQL. Por lo tanto, debe escribir una consulta SQL para crear una tabla dinámica en MySQL. Afortunadamente, hay muchas formas de crear una tabla dinámica en MySQL. Veamos cada uno de ellos rápidamente.

Cómo crear una tabla dinámica en MySQL

Estos son los pasos para crear una tabla dinámica en MySQL. Digamos que tienes la siguiente tabla

CREATE TABLE exams (
id int(11) NOT NULL auto_increment,
name varchar(15),
exam int,
score int,
PRIMARY KEY (id)
);

insert into exams (name,exam,score) values ('Bob',1,70);
insert into exams (name,exam,score) values ('Bob',2,77);
insert into exams (name,exam,score) values ('Bob',3,71);
insert into exams (name,exam,score) values ('Bob',4,70);

insert into exams (name,exam,score) values ('Sue',1,89);
insert into exams (name,exam,score) values ('Sue',2,87);
insert into exams (name,exam,score) values ('Sue',3,88);
insert into exams (name,exam,score) values ('Sue',4,89);

mysql> select * from exams;
+------+------+------+-------+
| id   | name | exam | score |
+------+------+------+-------+
|   1  |  Bob |   1  |   70  |
|   2  |  Bob |   2  |   77  |
|   3  |  Bob |   3  |   71  |
|   4  |  Bob |   4  |   70  |
|   5  |  Sue |   1  |   89  |
|   6  |  Sue |   2  |   87  |
|   7  |  Sue |   3  |   88  |
|   8  |  Sue |   4  |   89  |
+------+------+------+-------+


Digamos que desea girar la tabla por examen columna para crear 1 fila para cada estudiante y 1 columna para cada examen, como se muestra a continuación.

+--------+-----------+-----------+-----------+------------+
|   name |    exam1  |    exam2  |    exam3  |    exam4   |
+--------+-----------+-----------+-----------+------------+
|   Bob  |     70    |     77    |     71    |     70     |
|   Sue  |     89    |     87    |     88    |     89     |
+--------+-----------+-----------+-----------+------------+

Puede crear una tabla dinámica en MySQL usando la instrucción IF o CASE.

Lectura adicional: Cómo calcular la mediana en MySQL

Crear tabla dinámica en MySQL usando declaración IF

Aquí está la consulta SQL que transpone filas a columnas usando la instrucción IF.

SELECT name,
sum(IF(exam=1, score, NULL)) AS exam1,
sum(IF(exam=2, score, NULL)) AS exam2,
sum(IF(exam=3, score, NULL)) AS exam3,
sum(IF(exam=4, score, NULL)) AS exam4
FROM exams
GROUP BY name;
+--------+-----------+-----------+-----------+------------+
|   name |    exam1  |    exam2  |    exam3  |    exam4   |
+--------+-----------+-----------+-----------+------------+
|   Bob  |     70    |     77    |     71    |     70     |
|   Sue  |     89    |     87    |     88    |     89     |
+--------+-----------+-----------+-----------+------------+

En la consulta anterior, debe agrupar por nombre columna ya que desea 1 fila para cada estudiante. Además, debe proporcionar 1 condición para cada columna que necesita crear, es decir, 1 condición para cada examen

Crear una tabla dinámica en MySQL usando la instrucción CASE

Aquí está la consulta SQL para convertir filas en columnas usando la instrucción CASE.

SELECT name,
sum(CASE WHEN exam=1 THEN score ELSE NULL END) AS exam1,
sum(CASE WHEN exam=2 THEN score ELSE NULL END) AS exam2,
sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3,
sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4
FROM exams
GROUP BY name;
+--------+-----------+-----------+-----------+------------+
|   name |    exam1  |    exam2  |    exam3  |    exam4   |
+--------+-----------+-----------+-----------+------------+
|   Bob  |     70    |     77    |     71    |     70     |
|   Sue  |     89    |     87    |     88    |     89     |
+--------+-----------+-----------+-----------+------------+

La consulta anterior funciona de manera similar a la que usa la condición IF anterior. Debe agrupar por la columna por la que desea pivotar sus datos, es decir, nombre . Además, debe definir 1 instrucción CASE para cada número de examen, ya que desea crear columnas separadas para cada examen.

También puede combinar puntajes de exámenes en su tabla dinámica. Por ejemplo, si desea sumar las puntuaciones del examen 1 y el examen 2 y mostrarlas en la misma columna, puede usar la siguiente consulta.

SELECT name,
sum(CASE WHEN exam=1 or exam=2 THEN score ELSE NULL END) AS exam12,
sum(CASE WHEN exam=3 THEN score ELSE NULL END) AS exam3,
sum(CASE WHEN exam=4 THEN score ELSE NULL END) AS exam4
FROM exams
GROUP BY name;
+--------+------------+-----------+-----------+------------+
|   name |    exam12  |    exam2  |    exam3  |    exam4   |
+--------+------------+-----------+-----------+------------+
|   Bob  |     147    |     77    |     71    |     70     |
|   Sue  |     176    |     87    |     88    |     89     |
+--------+------------+-----------+-----------+------------+

En la tabla anterior, los puntajes del examen 1 y el examen 2 se agregaron y se muestran en un solo examen de columna12, simplemente modificando la condición de la declaración 1st CASE y eliminando la declaración 2nd CASE.

Puede personalizar las consultas anteriores según sus requisitos para crear una tabla dinámica en MySQL. También puede usar una herramienta de informes para trazar el resultado en una tabla. Este es un ejemplo de una tabla creada con Ubiq.

¿Sabías que puedes crear tablas dinámicas en Ubiq simplemente arrastrando y soltando?

Si desea crear tablas dinámicas, gráficos y paneles desde la base de datos MySQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.