sql >> Database >  >> RDS >> Mysql

Draaitabelquery's automatiseren in MySQL

Draaitabellen maken het gemakkelijk om uw gegevens te analyseren en nuttige trends te krijgen. Mogelijk moet u echter draaitabelquery's automatiseren om ze vaak te gebruiken. Aangezien MySQL geen functie heeft voor het maken van draaitabellen, moet u een SQL-query schrijven om draaitabellen in MySQL te automatiseren. Laten we dus eens kijken hoe we draaitabelquery's in MySQL kunnen automatiseren

Hoe draaitabellen in MySQL automatiseren

Hier zijn de stappen om draaitabelquery's in MySQL te automatiseren. Stel dat u de volgende tabel heeft

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

Stel dat u de tabel wilt draaien met examen kolom om 1 rij te maken voor elke meeting_id en 1 kolom voor elke field_key, zoals hieronder weergegeven.

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

Automatiseer draaitabelquery's

Als u al weet hoeveel kolommen u moet maken, kunt u draaitabelquery's maken met de instructie CASE om een ​​draaitabel te maken.

Vaak weet u echter niet welke kolommen u in draaitabellen moet maken. In dergelijke gevallen kunt u dynamisch draaitabellen maken met behulp van de volgende query.

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;

In de bovenstaande instructies kunt u met GROUP_CONCAT field_key-waarden van meerdere rijen samenvoegen tot één tekenreeks. In de bovenstaande query gebruiken we GROUP_CONCAT om dynamisch CASE-instructies te maken, gebaseerd op de unieke waarden in de kolom field_key en op te slaan in de @sql-variabele, die vervolgens wordt gebruikt om onze selectiequery te maken. Het helpt u dus bij het automatiseren van draaitabelquery's in MySQL

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

Nu u weet hoe u draaitabelquery's in MySQL kunt automatiseren, kunt u ze aanpassen aan uw vereisten door de WHERE-clausule of JOINS toe te voegen.

Als u alleen rijwaarden als kolommen wilt draaien, kunt u de WHERE-component toevoegen aan uw eerste select GROUP_CONCAT-instructie.

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

Als u rijen in uw uiteindelijke draaitabel wilt filteren, kunt u de WHERE-component in uw SET-instructie toevoegen.

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

Op dezelfde manier kunt u JOINS ook toepassen in uw SQL-query terwijl u rijen dynamisch naar kolommen transponeert in MySQL.

U kunt draaitabelquery's automatiseren met behulp van een rapportagetool. Hier is een voorbeeld van een geautomatiseerde draaitabel gemaakt met Ubiq.

Wist je dat je draaitabellen in Ubiq kunt maken door gewoon te slepen en neer te zetten?

Als u draaitabellen, grafieken, dashboards en rapporten wilt maken vanuit de MySQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen aan.

  1. Array doorgeven aan een SQL Server Stored Procedure

  2. De nieuwe Mac Pro rechtvaardigen

  3. Natuurlijk sorteren in MySQL

  4. MySQL Workbench-alternatieven - Point-and-Click GUI van ClusterControl