Heim > Datenbank > MySQL-Tutorial > Wie führe ich dynamisches Pivotieren in MySQL mithilfe vorbereiteter Anweisungen durch?

Wie führe ich dynamisches Pivotieren in MySQL mithilfe vorbereiteter Anweisungen durch?

Mary-Kate Olsen
Freigeben: 2025-01-06 07:31:41
Original
319 Leute haben es durchsucht

How to Perform Dynamic Pivoting in MySQL Using Prepared Statements?

Dynamischer Pivot in MySQL

In MySQL enthalten Tabellen oft Daten in einem normalisierten Format, was komplexe Abfragen erfordert, um Daten in einem benutzerfreundlicheren Format abzurufen -freundliches Format. Eine solche Transformation ist die Pivotierung, bei der Spalten in Zeilen umgewandelt werden.

Stellen Sie sich eine Tabelle wie „Teile“ vor, die Produktteile (part_id) mit Produkttypen (part_type) und Produkt-IDs (product_id) in Beziehung setzt. Wir möchten diese Tabelle drehen, um eine neue Tabelle zu erstellen, die die Teile-IDs jedes Produkts für verschiedene Teiletypen anzeigt.

MySQL verfügt nicht über eine dedizierte PIVOT-Funktion, daher müssen wir alternative Techniken verwenden. Eine Lösung besteht darin, Aggregatfunktionen und CASE-Anweisungen zu verwenden. Für die dynamische Pivotierung können wir vorbereitete Anweisungen nutzen.

Dynamische Pivot-Abfrage

Die folgende Abfrage verwendet dynamisches SQL, um die Tabelle „Teile“ zu Pivotieren:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when part_type = ''',
      part_type,
      ''' then part_id end) AS part_',
      part_type, '_id'
    )
  ) INTO @sql
FROM
  parts;
SET @sql = CONCAT('SELECT product_id, ', @sql, ' 
                  FROM parts 
                   GROUP BY product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Nach dem Login kopieren

Diese Abfrage generiert dynamisch eine SQL-Anweisung basierend auf den in der Tabelle vorhandenen unterschiedlichen Teiltypen und führt sie zur Verbesserung mithilfe vorbereiteter Anweisungen aus Leistung.

Beispielergebnis

Die resultierende Tabelle hat das folgende Format:

product_id      part_A_id      part_B_id
----------------------------------------
1               1              2
2               3              4
3               5              6
Nach dem Login kopieren

Statische Pivot-Abfrage

Für eine begrenzte Anzahl von Teiletypen kann eine statische Pivot-Abfrage erfolgen verwendet:

select product_id,
  max(case when part_type ='A' then part_id end) as Part_A_Id,
  max(case when part_type ='B' then part_id end) as Part_B_Id
from parts
group by product_id
Nach dem Login kopieren

Diese Abfrage gibt die Teiletypen manuell an und generiert die Pivot-Tabelle.

Das obige ist der detaillierte Inhalt vonWie führe ich dynamisches Pivotieren in MySQL mithilfe vorbereiteter Anweisungen durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage