Heim >Datenbank >MySQL-Tutorial >Wie summiere ich aggregierte Werte korrekt, wenn ich mehrere Tabellen in MySQL verbinde?

Wie summiere ich aggregierte Werte korrekt, wenn ich mehrere Tabellen in MySQL verbinde?

Susan Sarandon
Susan SarandonOriginal
2025-01-19 14:11:10506Durchsuche

How to Correctly SUM Aggregate Values When Joining Multiple Tables in MySQL?

Tabellen mit SUM-Problem in MYSQL verbinden

Das Verknüpfen von Tabellen mit SUM-Aggregation kann zu Komplexitäten führen. Um das Problem falscher Ergebnisse in Ihrer Abfrage zu beheben, gehen wir näher auf das Problem ein und suchen nach einer Lösung.

Das Hauptproblem bei der angegebenen Abfrage sind mehrere Verknüpfungen, die zu einem Kreuzprodukt führen. Diese Multiplikation von Summen mit der Anzahl übereinstimmender Zeilen in anderen Tabellen führt zu fehlerhaften Ergebnissen. Um dieses Problem zu beheben, können wir die SUM-Operationen in Unterabfragen verlagern.

Hier ist eine optimierte Abfrage, die Unterabfragen für beide SUM-Aggregationen enthält:

SELECT last_name, first_name, DATE_FORMAT(LEAST(mil_date, tm_date), '%m/%d/%y') AS dates, total, minutes
FROM bhds_teachers AS i
LEFT JOIN (
    SELECT ds_id, YEARWEEK(mil_date) AS week, MIN(mil_date) AS mil_date, SUM(drive_time) AS minutes
    FROM bhds_mileage
    WHERE mil_date BETWEEN '2016-04-11' AND  '2016-04-30'
    AND bhds_mileage.ds_id = 5
    GROUP BY ds_id, week) AS m 
ON m.ds_id = i.ds_id
LEFT JOIN (
    SELECT ds_id, YEARWEEK(tm_date) AS week, MIN(tm_date) AS tm_date, SUM(tm_hours) AS total
    WHERE tm_date BETWEEN '2016-04-11' AND '2016-04-30' AND bhds_timecard.ds_id = 5
    GROUP BY ds_id, week) AS t 
ON t.ds_id = i.ds_id AND t.week = m.week;

Diese Abfrage verwendet Unterabfragen sowohl für Minuten als auch für die Summe Summierungen und stellen genaue Ergebnisse sicher, indem Kreuzproduktmultiplikationen vermieden werden. Außerdem werden die Zeitrahmen für beide Unterabfragen angepasst, um einen konsistenten Datenabruf sicherzustellen. Durch die Umgestaltung der Abfrage mit Unterabfragen lösen wir effektiv das Problem, das durch mehrere Verknüpfungen und SUM-Aggregation verursacht wird.

Das obige ist der detaillierte Inhalt vonWie summiere ich aggregierte Werte korrekt, wenn ich mehrere Tabellen in MySQL verbinde?. 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