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

Como automatizar consultas de tabela dinâmica no MySQL


As Tabelas Dinâmicas facilitam a análise de seus dados e a obtenção de tendências úteis. No entanto, pode ser necessário automatizar as consultas de tabela dinâmica para usá-las com frequência. Como o MySQL não possui uma função para criar tabelas dinâmicas, você precisa escrever uma consulta SQL para automatizar as tabelas dinâmicas no MySQL. Então, vamos ver como automatizar consultas de tabela dinâmica no MySQL


Como automatizar consultas de tabela dinâmica no MySQL


Aqui estão as etapas para automatizar consultas de tabela dinâmica no MySQL. 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 dinamizar a tabela por exame column para criar 1 linha para cada meeting_id e 1 coluna para cada field_key, conforme mostrado abaixo.
+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+


Automatizar consultas de tabela dinâmica


Se você já sabe o número de colunas a serem criadas, pode criar consultas de tabela dinâmica usando a instrução CASE para criar uma tabela dinâmica.

No entanto, muitas vezes você não conhece as colunas que precisa criar nas tabelas dinâmicas. Nesses casos, você pode criar tabelas dinâmicas dinamicamente usando a consulta a seguir.
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when exam = ''',
      exam,
      ''' 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;


Nas instruções acima, GROUP_CONCAT permite concatenar valores field_key de várias linhas em uma única string. Na consulta acima, usamos GROUP_CONCAT para criar dinamicamente instruções CASE, com base nos valores exclusivos na coluna field_key e armazenar na variável @sql, que é então usada para criar nossa consulta de seleção. Por isso, ajuda a automatizar consultas de tabela dinâmica no MySQL
+------------+------------+-----------+------------+
| Meeting_id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

Agora que você sabe como automatizar consultas de tabelas dinâmicas no MySQL, você pode personalizá-las de acordo com seus requisitos adicionando a cláusula WHERE ou JOINS.

Se você deseja dinamizar apenas valores de linha selecionados como colunas, você pode adicionar a cláusula WHERE em sua primeira instrução GROUP_CONCAT selecionada.
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.
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 transpõe linhas para colunas dinamicamente no MySQL.

Você pode automatizar consultas de tabela dinâmica usando uma ferramenta de relatório. Aqui está um exemplo de tabela dinâmica automatizada criada usando o 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, painéis e relatórios do banco de dados MySQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.