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

Cómo automatizar consultas de tablas dinámicas en MySQL

Las tablas dinámicas facilitan el análisis de sus datos y obtienen tendencias útiles. Sin embargo, es posible que deba automatizar las consultas de la tabla dinámica para usarlas con frecuencia. Dado que MySQL no tiene una función para crear tablas dinámicas, debe escribir una consulta SQL para automatizar las tablas dinámicas en MySQL. Así que veamos cómo automatizar consultas de tablas dinámicas en MySQL

Cómo automatizar consultas de tablas dinámicas en MySQL

Estos son los pasos para automatizar consultas de tablas dinámicas en MySQL. Digamos que tienes la siguiente tabla

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 desea girar la tabla por examen columna para crear 1 fila para cada meeting_id y 1 columna para cada field_key, como se muestra a continuación.

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

Automatizar consultas de tablas dinámicas

Si ya conoce la cantidad de columnas que se crearán, puede crear consultas de tablas dinámicas utilizando la instrucción CASE para crear una tabla dinámica.

Sin embargo, muchas veces no conoce las columnas que necesita crear en las tablas dinámicas. En tales casos, puede crear dinámicamente tablas dinámicas utilizando la siguiente consulta.

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;

En las declaraciones anteriores, GROUP_CONCAT le permite concatenar valores field_key de varias filas en una sola cadena. En la consulta anterior, usamos GROUP_CONCAT para crear declaraciones CASE dinámicamente, en función de los valores únicos en la columna field_key y almacenar en la variable @sql, que luego se usa para crear nuestra consulta de selección. Por lo tanto, lo ayuda a automatizar consultas de tablas dinámicas en MySQL

+------------+------------+-----------+------------+
| Meeting_id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

Ahora que sabe cómo automatizar consultas de tablas dinámicas en MySQL, puede personalizarlas según sus requisitos agregando la cláusula WHERE o JOINS.

Si desea pivotar solo los valores de fila seleccionados como columnas, puede agregar la cláusula WHERE en su primera instrucción GROUP_CONCAT de selección.

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting
WHERE <condition>;

Si desea filtrar filas en su tabla dinámica final, puede agregar la cláusula WHERE en su instrucción SET.

SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting WHERE <condition>
                   GROUP BY Meeting_id');

Del mismo modo, también puede aplicar JOINS en su consulta SQL mientras transpone filas a columnas dinámicamente en MySQL.

Puede automatizar consultas de tablas dinámicas utilizando una herramienta de informes. Este es un ejemplo de tabla dinámica automatizada 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, paneles e informes desde la base de datos MySQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.