Heim > Datenbank > MySQL-Tutorial > Wie führe ich dynamische Kreuztabellenabfragen in MySQL mit PIVOT durch?

Wie führe ich dynamische Kreuztabellenabfragen in MySQL mit PIVOT durch?

Susan Sarandon
Freigeben: 2025-01-06 09:30:41
Original
711 Leute haben es durchsucht

How to Perform Dynamic Crosstab Queries in MySQL Using PIVOT?

MySQL PIVOT/CROSSTAB-Abfrage

Problemstellung:

Eine Tabelle mit Daten, die Benutzereingaben für verschiedene Attribute darstellen, muss in eine Kreuztabelle umgewandelt werden Format, in dem jede Spaltenüberschrift ein Attribut darstellt und jede Zeile die entsprechenden Benutzereingabewerte für dieses Attribut enthält. Darüber hinaus sollte der Wert der Spalte „customer_attribute“ als Spaltenüberschrift anstelle statischer Beschriftungen verwendet werden.

Abfrage 1: Daten in Kreuztabellenformat umwandeln

Um das gewünschte Kreuztabellenformat zu erreichen, können Sie a verwenden PIVOT-Abfrage wie folgt:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE node_id when ',
      node_id,
      ' then entered_value else NULL END) AS user_input',
      node_id
    )
  ) INTO @sql
FROM trn_user_log;


SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                  FROM trn_user_log 
                  GROUP BY app_id, transaction_id, mobile_no');

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

Diese Abfrage verwendet den PIVOT-Operator, um die Zeilen in Spalten umzuwandeln und nach zu gruppieren Spalten „app_id“, „transaction_id“ und „mobile_no“.

Abfrage 2: Benutzerdefinierte Spaltenüberschriften verwenden

Um die Werte aus der Spalte „customer_attribute“ als Spaltenüberschriften zu verwenden, können Sie die obige Abfrage leicht ändern:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE node_id when ',
      node_id,
      ' then entered_value else NULL END) AS ',
      customer_attribute
    )
  ) INTO @sql
FROM trn_user_log;

SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                  FROM trn_user_log 
                  GROUP BY app_id, transaction_id, mobile_no');

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

Diese überarbeitete Abfrage ersetzt die statischen Spaltenüberschriften (user_input1, user_input2 usw.) durch die entsprechenden customer_attribute-Werte.

Hinweis:

  • Die in diesen Abfragen verwendeten vorbereiteten Anweisungen stellen eine dynamische Spaltenerstellung sicher und vermeiden potenzielle Syntaxfehler bei der Verarbeitung einer unbekannten Anzahl von Spalten.
  • Die in Ihrer ursprünglichen Abfrage verwendete Funktion NAME_CONST ist in diesem Fall nicht anwendbar, da sie einen konstanten Wert als zweites Argument erfordert, was für dynamische Spalten nicht möglich ist Generation.

Das obige ist der detaillierte Inhalt vonWie führe ich dynamische Kreuztabellenabfragen in MySQL mit PIVOT durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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