Heim >Datenbank >MySQL-Tutorial >Wie aggregiere ich SUM-Werte über mehrere Datenbanktabellen hinweg korrekt?

Wie aggregiere ich SUM-Werte über mehrere Datenbanktabellen hinweg korrekt?

Susan Sarandon
Susan SarandonOriginal
2024-12-29 05:45:11950Durchsuche

How to Correctly Aggregate SUM Values Across Multiple Database Tables?

Datenbankaggregation über mehrere Tabellen hinweg: Summenberechnungen korrigieren

Beim Umgang mit mehreren Tabellen in einer Datenbank erfordern Aggregationsfunktionen wie SUM eine sorgfältige Handhabung sorgen für genaue Ergebnisse. Dies wird durch eine Abfrage veranschaulicht, die versucht, die Summe der Werte aus zwei Tabellen, AP und INV, zu berechnen, die beide die Spalten [PROJEKT] und [Wert] haben. Die gewünschte Ausgabe sollte wie folgt aussehen:

PROJECT | SUM_AP | SUM_INV

Die bereitgestellte Abfrage ergab jedoch aufgrund eines Summationsfehlers falsche Ergebnisse:

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]

Das Problem liegt in der Gruppierung der Werte. Die GROUP BY-Klausel kombiniert doppelte Werte, was zu falschen Summen führt.

Um dies zu korrigieren, können 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]

Dieser Ansatz berechnet die Summen separat für jedes [PROJEKT ] unter Verwendung von Unterauswahlen, was zu einer genauen Aggregation führt.

Das obige ist der detaillierte Inhalt vonWie aggregiere ich SUM-Werte über mehrere Datenbanktabellen hinweg korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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