sql >> Database teknologi >  >> RDS >> Mysql

Sådan automatiseres pivottabelforespørgsler i MySQL

Pivottabeller gør det nemt at analysere dine data og få nyttige tendenser. Du skal dog muligvis automatisere pivottabelforespørgsler for at bruge dem ofte. Da MySQL ikke har en funktion til at oprette pivottabeller, skal du skrive SQL-forespørgsel for at automatisere pivottabeller i MySQL. Så lad os se på, hvordan man automatiserer pivottabelforespørgsler i MySQL

Sådan automatiseres pivottabelforespørgsler i MySQL

Her er trinene til at automatisere pivottabelforespørgsler i MySQL. Lad os sige, at du har følgende tabel

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

Lad os sige, at du vil dreje tabellen efter eksamen kolonne for at oprette 1 række for hvert møde-id og 1 kolonne for hver feltnøgle, som vist nedenfor.

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

Automatiser pivottabelforespørgsler

Hvis du allerede kender antallet af kolonner, der skal oprettes, kan du oprette pivottabelforespørgsler ved hjælp af CASE-sætningen til at oprette en pivottabel.

Men mange gange kender du ikke de kolonner, du skal oprette i pivottabeller. I sådanne tilfælde kan du dynamisk oprette pivottabeller ved hjælp af følgende forespørgsel.

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;

I ovenstående udsagn giver GROUP_CONCAT dig mulighed for at sammenkæde feltnøgleværdier fra flere rækker til en enkelt streng. I ovenstående forespørgsel bruger vi GROUP_CONCAT til dynamisk at skabe CASE-sætninger, baseret på de unikke værdier i field_key-kolonnen og lagre i @sql-variablen, som derefter bruges til at oprette vores select-forespørgsel. Så det hjælper dig med at automatisere pivottabelforespørgsler i MySQL

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

Nu hvor du ved, hvordan du automatiserer pivottabelforespørgsler i MySQL, kan du tilpasse dem efter dine krav ved at tilføje WHERE-klausul eller JOINS.

Hvis du kun vil pivotere vælg rækkeværdier som kolonner, kan du tilføje WHERE-sætning i din 1st select GROUP_CONCAT-sætning.

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

Hvis du vil filtrere rækker i din sidste pivottabel, kan du tilføje WHERE-sætningen i din SET-sætning.

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

På samme måde kan du også anvende JOINS i din SQL-forespørgsel, mens du transponerer rækker til kolonner dynamisk i MySQL.

Du kan automatisere pivottabelforespørgsler ved hjælp af et rapporteringsværktøj. Her er et eksempel på automatiseret pivottabel oprettet ved hjælp af Ubiq.

Vidste du, at du kan oprette pivottabeller i Ubiq ved blot at trække og slippe?

Hvis du vil oprette pivottabeller, diagrammer, dashboards og rapporter fra MySQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.

  1. INDSÆT ... PÅ DUBLIKAT NØGLOPDATERING med HVOR?

  2. VIS ALLE Datoer data mellem to datoer; hvis der ikke findes en række for en bestemt dato, så vis nul i alle kolonner

  3. Tilføj år til en dato i PostgreSQL

  4. Output SQLite-forespørgselsresultater som en INSERT-sætning