首頁 >資料庫 >mysql教程 >在 MySQL 中連接多個資料表時如何正確對聚合值求和?

在 MySQL 中連接多個資料表時如何正確對聚合值求和?

Susan Sarandon
Susan Sarandon原創
2025-01-19 14:11:10562瀏覽

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

MYSQL 中使用 SUM 問題連接表

使用 SUM 聚合連接表可能會帶來複雜性。為了解決查詢中結果不正確的問題,讓我們深入研究問題並探索解決方案。

給定查詢中的主要問題是多個聯接,導致叉積。將總和乘以其他表中的匹配行數會導致錯誤的結果。為了解決這個問題,我們可以將 SUM 操作重新定位到子查詢。

這是一個最佳化的查詢,其中包含兩個SUM 聚合的子查詢:

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;

此查詢對分鐘和總計使用子查詢求和,透過避免叉積乘法來確保準確的結果。它還調整兩個子查詢的時間範圍,以確保資料檢索的一致性。透過子查詢重構查詢,有效解決了多重連結和SUM聚合所帶來的問題。

以上是在 MySQL 中連接多個資料表時如何正確對聚合值求和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn