首頁 >資料庫 >mysql教程 >如何在SQL中準確計算多個表的SUM?

如何在SQL中準確計算多個表的SUM?

DDD
DDD原創
2024-12-30 11:43:15885瀏覽

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

查詢多個資料表進行 SUM 計算

在關聯式資料庫中,通常需要跨多個資料表進行資料聚合。這對於匯總值或計算總計特別有用。然而,了解數據匯總的原理對於確保結果準確非常重要。

查詢兩個表 AP 和 INV 時會出現這樣的情況,這兩個表共用一個名為 [PROJECT] 的公共欄位。目標是傳回一個結果集,其中包含 PROJECT 作為主鍵和兩個總計欄位:SUM_AP 和 SUM_INV,分別表示 AP 和 INV 表中每個項目的 Value 欄位的總和。

常見方法解決這個問題的方法是使用INNER JOIN 操作,如以下程式碼所示:

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]

但是,此查詢傳回不正確的結果,因為分組操作(GROUP BY )在求和(SUM)之前應用。這會導致總和中包含重複值,從而導致總數膨脹。

要解決此問題,更準確的方法是使用子選擇對每個表單獨執行聚合:

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]

此修改後的查詢使用SUM 函數中的子選擇來計算每個項目的SUM_AP 和SUM_INV 值。子查詢根據符合的 PROJECT 值獨立聚合每個資料表的 Value 資料列,消除重複值的問題。

利用這種方法,您可以有效地查詢多個表並執行精確的聚合操作,以獲得期望的匯總結果,沒有任何錯誤的計算。

以上是如何在SQL中準確計算多個表的SUM?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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