Heim > Datenbank > MySQL-Tutorial > Wie kann ich SUMMEN aus mehreren Tabellen in SQL genau berechnen?

Wie kann ich SUMMEN aus mehreren Tabellen in SQL genau berechnen?

DDD
Freigeben: 2024-12-30 11:43:15
Original
887 Leute haben es durchsucht

How Can I Accurately Calculate SUMs from Multiple Tables in SQL?

Abfragen mehrerer Tabellen für SUM-Berechnungen

Im Zusammenhang mit relationalen Datenbanken ist es üblich, eine Datenaggregation über mehrere Tabellen hinweg zu erfordern. Dies ist besonders nützlich, um Werte zusammenzufassen oder Gesamtsummen zu berechnen. Es ist jedoch wichtig, die Prinzipien der Datenzusammenfassung zu verstehen, um genaue Ergebnisse sicherzustellen.

Ein solches Szenario tritt auf, wenn zwei Tabellen, AP und INV, abgefragt werden, die eine gemeinsame Spalte mit dem Namen [PROJECT] teilen. Das Ziel besteht darin, eine Ergebnismenge zurückzugeben, die PROJECT als Primärschlüssel und zwei Zusammenfassungsspalten enthält: SUM_AP und SUM_INV, die die Summe der Wertspalte für jedes Projekt in den AP- bzw. INV-Tabellen darstellen.

Ein gängiger Ansatz Um dieses Problem zu lösen, muss eine INNER JOIN-Operation verwendet werden, wie im folgenden Code dargestellt:

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]
Nach dem Login kopieren

Diese Abfrage gibt jedoch aufgrund der Gruppierungsoperation falsche Ergebnisse zurück (GROUP BY) wird vor der Summierung (SUM) angewendet. Dies führt dazu, dass doppelte Werte in die Summe einbezogen werden, was zu überhöhten Gesamtsummen führt.

Um dieses Problem zu lösen, besteht ein genauerer Ansatz darin, Unterauswahlen zu verwenden, um die Aggregation für jede Tabelle separat durchzuführen:

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]
Nach dem Login kopieren

Diese überarbeitete Abfrage verwendet Unterauswahlen innerhalb der SUM-Funktionen, um die Werte von SUM_AP und SUM_INV für jedes Projekt zu berechnen. Die Unterauswahlen aggregieren unabhängig voneinander die Wertspalte für jede Tabelle basierend auf dem passenden PROJEKT-Wert, wodurch das Problem doppelter Werte vermieden wird.

Durch die Verwendung dieses Ansatzes können Sie mehrere Tabellen effektiv abfragen und genaue Aggregationsvorgänge durchführen, um sie zu erhalten die gewünschte Zusammenfassung ohne fehlerhafte Berechnungen.

Das obige ist der detaillierte Inhalt vonWie kann ich SUMMEN aus mehreren Tabellen in SQL genau berechnen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage