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

Cómo crear tablas dinámicas dinámicas en MySQL

Las tablas dinámicas facilitan el análisis de grandes volúmenes de datos al organizar la información en un conjunto de datos más pequeño y manejable. Sin embargo, no hay una función integrada para lograr pivotar en MySQL. Necesitamos escribir una consulta SQL para convertir una fila en una columna en MySQL y luego crear un informe dinámico en MySQL. Entonces, veamos cómo crear tablas dinámicas dinámicas en MySQL.

Cómo crear tablas dinámicas dinámicas en MySQL

Si desea crear una tabla dinámica en MySQL, normalmente usaría declaraciones IF/CASE. Sin embargo, este enfoque solo funciona cuando ya conoce todas las columnas que necesita crear en una tabla dinámica.

¿Cómo crea tablas dinámicas dinámicas en MySQL, cuando no conoce las columnas que se crearán o si espera que cambien con el tiempo? En tales casos, usamos el GROUP_CONCAT función.

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    |
+------+------------+------------+-------------+

Supongamos que desea crear una tabla dinámica dinámica, de modo que se cree una nueva columna para cada valor único en field_key columna, es decir (nombre, apellido, ocupación)

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

Crear tablas dinámicas dinámicas en MySQL

Si ya sabe qué columnas crear en la tabla dinámica, puede usar una instrucción CASE para crear una tabla dinámica. Sin embargo, para crear tablas dinámicas dinámicas en MySQL, usamos GROUP_CONCAT función para transponer dinámicamente filas a columnas, como se muestra a continuación.

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 le permite concatenar valores de varias filas en una sola cadena. En la consulta anterior, usamos GROUP_CONCAT para crear sentencias CASE dinámicamente, basadas en valores únicos en la field_key columna y almacene esa cadena en la variable @sql. Luego se usa para crear nuestra consulta de selección.

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

De esta forma, puede automatizar las consultas de tablas dinámicas en MySQL.

Puede personalizar la consulta anterior según sus requisitos agregando la cláusula WHERE o JOINS.

Si desea pivotar solo valores de fila seleccionados como columnas, puede agregar la cláusula WHERE en su primera declaración GROUP_CONCAT seleccionada, como se muestra en negrita debajo

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 declaración SET como se muestra en negrita a continuación.

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 crea tablas dinámicas dinámicas en MySQL.

Una vez que crea tablas dinámicas dinámicas en MySQL, puede usar una herramienta de informes para trazarlas en una tabla. Este es un ejemplo de una tabla dinámica creada con Ubiq.

¿Sabía que puede crear tablas dinámicas dinámicas en Ubiq sin escribir SQL?

Por cierto, si desea crear tablas dinámicas, gráficos y paneles desde la base de datos MySQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.