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

Como criar tabelas dinâmicas no MySQL


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.