MySQL PIVOT-Abfrageergebnisse mit GROUP BY
Problem:
Transformation einer Datenbanktabelle in Zeilen als Spalten anzeigen, Daten nach einem angegebenen Schlüssel (z. B. Zeitstempel) gruppieren und gleichzeitig sicherstellen, dass alle Datenwerte für jeden Schlüssel in der entsprechenden Spalte dargestellt werden.
Vorgeschlagene Abfrage:
SELECT d.data_timestamp,
SUM(IF(data_id = 1, data_value, 0)) AS 'input_1',
SUM(IF(data_id = 2, data_value, 0)) AS 'input_2',
...
SUM(IF(data_id = 20, data_value, 0)) AS 'input_20'
FROM data
GROUP BY d.data_timestamp
ORDER BY d.data_timestamp ASC
Nach dem Login kopieren
Erklärung:
- Die äußere Abfrage wählt unterschiedliche Datenzeitstempel aus der Datentabelle aus.
- Für jeden Datenzeitstempel berechnet die Abfrage die Summe der Datenwerte für jede data_id unter Verwendung der IF()-Funktion innerhalb des SUM()-Aggregats.
- Wenn die data_id mit der gewünschten ID übereinstimmt (z. B. 1 für input_1), wird der entsprechende Datenwert zur Summe addiert ; andernfalls wird 0 hinzugefügt.
- Diese Berechnung wird für jede Daten-ID bis zu 20 wiederholt, wodurch eine Spalte für jede unterschiedliche Daten-ID erstellt wird.
- Das Endergebnis wird nach dem Datenzeitstempel gruppiert und aufsteigend sortiert Reihenfolge.
Einschränkungen:
- Dieser Ansatz erfordert eine explizite Summe für jede data_id in der Abfrage, was möglicherweise nicht möglich ist, wenn es eine gibt große Anzahl von IDs.
- Abhängig von den spezifischen Anforderungen und der Datenstruktur kann ein alternativer Ansatz mit einem CASE oder mehrstufigen JOINs verwendet werden.
Das obige ist der detaillierte Inhalt vonWie werden MySQL-Abfrageergebnisse mit GROUP BY und mehreren Daten-IDs geschwenkt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!