SQL-Abfrage zum Aggregieren von Daten aus mehreren Tabellen
In SQL kann das Aggregieren von Daten aus mehreren Tabellen mithilfe verschiedener Techniken erreicht werden. Hier ist ein Szenario und eine Lösung für eine Abfrage, die Daten aus zwei Tabellen kombiniert:
Szenario:
Betrachten Sie zwei Tabellen, AP und INV, die beide die Spalten [PROJEKT] enthalten. und [Wert]. Das Ziel besteht darin, ein Ergebnis abzurufen, das die Summe von [Wert] für jedes Projekt aus beiden Tabellen berechnet, was zu folgendem Format führt:
PROJECT | SUM_AP | SUM_INV ---------+--------+-------- XXXXX | 500 | 800
Falsche Abfrage:
Die folgende Abfrage wurde versucht, ergab jedoch falsche Beträge:
SELECT AP.[PROJECT], SUM(AP.Value) AS SUM_AP, SUM(INV.Value) AS SUM_INV FROM AP INNER JOIN INV ON (AP.[PROJECT] = INV.[PROJECT]) WHERE AP.[PROJECT] = 'XXXXX' GROUP BY AP.[PROJECT]
Grund für Falsche Ergebnisse:
Die falsche Abfrage gruppiert die Werte, bevor die Summe angewendet wird, was dazu führt, dass doppelte Projektwerte in die Summen einbezogen werden.
Richtige Lösung:
Um dieses Problem zu beheben, kann eine Abfrage mit Unterauswahlen verwendet werden:
SELECT AP1.[PROJECT], (SELECT SUM(AP2.Value) FROM AP AS AP2 WHERE AP2.PROJECT = AP1.PROJECT) AS SUM_AP, (SELECT SUM(INV2.Value) FROM INV AS INV2 WHERE INV2.PROJECT = AP1.PROJECT) AS SUM_INV FROM AP AS AP1 INNER JOIN INV AS INV1 ON (AP1.[PROJECT] = INV1.[PROJECT]) WHERE AP1.[PROJECT] = 'XXXXX' GROUP BY AP1.[PROJECT]
Diese Abfrage verwendet Unterauswahlen ermöglichen die separate Berechnung der Summen innerhalb jedes Projekts, wodurch das Problem doppelter Werte vermieden wird und die korrekten Gesamtergebnisse bereitgestellt werden.
Das obige ist der detaillierte Inhalt vonWie aggregiere ich Daten aus mehreren Tabellen in SQL mithilfe von Unterabfragen korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!