Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So automatisieren Sie Pivot-Tabellenabfragen in MySQL

Pivot-Tabellen machen es einfach, Ihre Daten zu analysieren und nützliche Trends zu erhalten. Möglicherweise müssen Sie Pivot-Tabellenabfragen jedoch automatisieren, um sie häufig zu verwenden. Da MySQL keine Funktion zum Erstellen von Pivot-Tabellen hat, müssen Sie eine SQL-Abfrage schreiben, um Pivot-Tabellen in MySQL zu automatisieren. Schauen wir uns also an, wie Pivot-Tabellenabfragen in MySQL automatisiert werden

Automatisieren von Pivot-Tabellenabfragen in MySQL

Hier sind die Schritte zum Automatisieren von Pivot-Tabellenabfragen in MySQL. Angenommen, Sie haben die folgende Tabelle

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

Angenommen, Sie möchten die Tabelle nach Prüfung pivotieren Spalte, um 1 Zeile für jede meeting_id und 1 Spalte für jeden field_key zu erstellen, wie unten gezeigt.

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

Pivot-Tabellenabfragen automatisieren

Wenn Sie die Anzahl der zu erstellenden Spalten bereits kennen, können Sie mit der CASE-Anweisung Pivot-Tabellenabfragen erstellen, um eine Pivot-Tabelle zu erstellen.

Oft wissen Sie jedoch nicht, welche Spalten Sie in Pivot-Tabellen erstellen müssen. In solchen Fällen können Sie mithilfe der folgenden Abfrage dynamisch Pivot-Tabellen erstellen.

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 den obigen Anweisungen können Sie mit GROUP_CONCAT field_key-Werte aus mehreren Zeilen zu einer einzigen Zeichenfolge verketten. In der obigen Abfrage verwenden wir GROUP_CONCAT, um CASE-Anweisungen basierend auf den eindeutigen Werten in der Spalte field_key dynamisch zu erstellen und in der @sql-Variablen zu speichern, die dann zum Erstellen unserer Auswahlabfrage verwendet wird. So hilft es Ihnen, Pivot-Tabellenabfragen in MySQL zu automatisieren

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

Da Sie nun wissen, wie Pivot-Tabellenabfragen in MySQL automatisiert werden, können Sie sie gemäß Ihren Anforderungen anpassen, indem Sie WHERE-Klauseln oder JOINS hinzufügen.

Wenn Sie nur ausgewählte Zeilenwerte als Spalten pivotieren möchten, können Sie Ihrer ersten select GROUP_CONCAT-Anweisung eine WHERE-Klausel hinzufügen.

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

Wenn Sie Zeilen in Ihrer endgültigen Pivot-Tabelle filtern möchten, können Sie die WHERE-Klausel in Ihre SET-Anweisung einfügen.

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

In ähnlicher Weise können Sie auch JOINS in Ihrer SQL-Abfrage anwenden, während Sie in MySQL Zeilen dynamisch in Spalten transponieren.

Sie können Pivot-Tabellenabfragen mit einem Reporting-Tool automatisieren. Hier ist ein Beispiel für eine automatisierte Pivot-Tabelle, die mit Ubiq erstellt wurde.

Wussten Sie, dass Sie Pivot-Tabellen in Ubiq einfach per Drag &Drop erstellen können?

Wenn Sie Pivot-Tabellen, Diagramme, Dashboards und Berichte aus einer MySQL-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.