As tabelas dinâmicas facilitam a análise de grandes volumes de dados organizando as informações em um conjunto de dados menor e gerenciável. No entanto, não há função interna para obter pivô no MySQL. Precisamos escrever uma consulta SQL para converter linha em coluna no MySQL e, em seguida, criar um relatório dinâmico no MySQL. Então, vamos ver como criar tabelas dinâmicas no MySQL.
Como criar tabelas dinâmicas no MySQL
Se você deseja criar uma tabela dinâmica no MySQL, normalmente usaria instruções IF/CASE. No entanto, essa abordagem funciona apenas quando você já conhece todas as colunas que precisa criar em uma tabela dinâmica.
Como você cria tabelas dinâmicas no MySQL, quando você não conhece as colunas a serem criadas ou se espera que elas mudem com o tempo? Nesses casos, usamos o GROUP_CONCAT função.
Digamos que você tenha a seguinte tabela
CREATE TABLE Meeting ( ID INT, Meeting_id INT, field_key VARCHAR(100), field_value VARCHAR(100) ); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (1, 1,'first_name' , 'Alec'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (2, 1,'last_name' , 'Jones'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (3, 1,'occupation' , 'engineer'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (4,2,'first_name' , 'John'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (5,2,'last_name' , 'Doe'); INSERT INTO Meeting(ID,Meeting_id,field_key,field_value) VALUES (6,2,'occupation' , 'engineer'); +------+------------+------------+-------------+ | ID | Meeting_id | field_key | field_value | +------+------------+------------+-------------+ | 1 | 1 | first_name | Alec | | 2 | 1 | last_name | Jones | | 3 | 1 | occupation | engineer | | 4 | 2 | first_name | John | | 5 | 2 | last_name | Doe | | 6 | 2 | occupation | engineer | +------+------------+------------+-------------+
Digamos que você queira criar uma tabela dinâmica dinâmica, de modo que uma nova coluna seja criada para cada valor exclusivo em field_key coluna, que é (first_name, last_name, ocupação)
+------------+-------------+-------------+-------------+ | Meeting_id | first_name | last_name | occupation | +------------+-------------+-------------+-------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+-------------+-------------+-------------+
Criar tabelas dinâmicas no MySQL
Se você já sabe quais colunas criar na tabela dinâmica, pode usar uma instrução CASE para criar uma tabela dinâmica. No entanto, para criar tabelas dinâmicas no MySQL, usamos GROUP_CONCAT função para transpor dinamicamente linhas para colunas, conforme mostrado abaixo.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting; SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting GROUP BY Meeting_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
GROUP_CONCAT permite concatenar valores de várias linhas em uma única string. Na consulta acima, usamos GROUP_CONCAT para criar instruções CASE dinamicamente, com base em valores exclusivos na field_key coluna e armazene essa string na variável @sql. Ele é então usado para criar nossa consulta de seleção.
+------------+------------+-----------+------------+ | Meeting_id | first_name | last_name | occupation | +------------+------------+-----------+------------+ | 1 | Alec | Jones | engineer | | 2 | John | Doe | engineer | +------------+------------+-----------+------------+
Dessa forma, você pode automatizar consultas de tabela dinâmica no MySQL.
Você pode personalizar a consulta acima de acordo com seus requisitos adicionando a cláusula WHERE ou JOINS.
Se você deseja dinamizar apenas valores de linha selecionados como colunas, pode adicionar a cláusula WHERE em sua primeira instrução GROUP_CONCAT selecionada, conforme mostrado em negrito abaixo de
SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when field_key = ''', field_key, ''' then field_value end) ', field_key ) ) INTO @sql FROM Meeting WHERE <condition>;
Se você deseja filtrar linhas em sua tabela dinâmica final, pode adicionar a cláusula WHERE em sua instrução SET, conforme mostrado em negrito abaixo de.
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' FROM Meeting WHERE <condition> GROUP BY Meeting_id');
Da mesma forma, você também pode aplicar JOINS em sua consulta SQL enquanto cria tabelas dinâmicas no MySQL.
Depois de criar tabelas dinâmicas no MySQL, você pode usar uma ferramenta de relatório para plotá-las em uma tabela. Aqui está um exemplo de tabela dinâmica criada usando Ubiq.
Você sabia que pode criar tabelas dinâmicas no Ubiq sem escrever nenhum SQL?
A propósito, 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.