Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar uma tabela dinâmica no MySQL


As tabelas dinâmicas são úteis para análise de dados, permitem exibir valores de linha como colunas para obter insights com facilidade. No entanto, não há função para criar uma tabela dinâmica no MySQL. Então, você precisa escrever uma consulta SQL para criar uma tabela dinâmica no MySQL. Felizmente, existem muitas maneiras de criar Tabela Dinâmica no MySQL. Vejamos cada um deles rapidamente.


Como criar tabela dinâmica no MySQL




Aqui estão as etapas para criar uma tabela dinâmica no MySQL. Digamos que você tenha a seguinte tabela
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 você queira dinamizar a tabela por exame coluna para criar 1 linha para cada aluno e 1 coluna para cada exame, conforme mostrado abaixo.
+--------+-----------+-----------+-----------+------------+
|   name |    exam1  |    exam2  |    exam3  |    exam4   |
+--------+-----------+-----------+-----------+------------+
|   Bob  |     70    |     77    |     71    |     70     |
|   Sue  |     89    |     87    |     88    |     89     |
+--------+-----------+-----------+-----------+------------+

Você pode criar uma tabela dinâmica no MySQL usando a instrução IF ou CASE.

Leitura bônus: Como calcular a mediana no MySQL

Criar tabela dinâmica no MySQL usando a instrução IF


Aqui está a consulta SQL que transpõe linhas para colunas usando a instrução 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     |
+--------+-----------+-----------+-----------+------------+

Na consulta acima, você precisa agrupar por nome coluna, pois você deseja 1 linha para cada aluno. Além disso, você precisa fornecer 1 condição para cada coluna que precisa criar, ou seja, 1 condição para cada exame


Criar tabela dinâmica no MySQL usando a instrução CASE


Aqui está a consulta SQL para converter linhas em colunas usando a instrução 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     |
+--------+-----------+-----------+-----------+------------+

A consulta acima funciona de forma semelhante àquela que usa a condição IF acima. Você precisa agrupar pela coluna pela qual deseja dinamizar seus dados, ou seja, nome . Além disso, você precisa definir 1 instrução CASE para cada número de exame, pois deseja criar colunas separadas para cada exame.



Você também pode combinar as pontuações dos exames em sua tabela dinâmica. Por exemplo, se você quiser somar as pontuações do exame1 e do exame2 e mostrá-los na mesma coluna, você pode usar a seguinte 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     |
+--------+------------+-----------+-----------+------------+

Na tabela acima, os escores do exame 1 e do exame 2 foram somados e exibidos em uma única coluna do exame12, bastando modificar a condição da instrução 1º CASE e remover a instrução 2º CASE.



Você pode personalizar as consultas acima conforme sua necessidade para criar uma tabela dinâmica no MySQL. Você também pode usar uma ferramenta de relatório para plotar o resultado em uma tabela. Aqui está um exemplo de tabela criada usando Ubiq.





Você sabia que pode criar tabelas dinâmicas no Ubiq usando apenas arrastar e soltar?

Se você deseja criar tabelas dinâmicas, gráficos e painéis do banco de dados MySQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.