我有一個表交貨和一個表訂單。幾個訂單可以鏈接到交付。前幾天,我問了一個question關於如何獲得特定交付訂單金額的總和,並迅速顯示如何。 (再次感謝。)SUM和GROUP BY問題
現在我們已經添加了結算表,並且就像訂單一樣,可以有多個結算鏈接到一個交付(通過交付ID,就像訂單一樣),而我試圖獲得他們的價值總和。我想我會使用相同的策略和左加入結算表,但問題是,當只有一個結算鏈接到特定的交付時,SUM(s.amount)返回實際值的兩倍。
我試着玩弄GROUP BY無濟於事。任何人都可以告訴我我做錯了什麼?
提前致謝!
PS:這是我一直在使用,當只有一個結算返回結算量的兩倍值查詢:
SELECT
d.id,
SUM(o.goods_amount) AS amount,
SUM(s.amount) AS settlementAmount,
FROM delivery d
LEFT JOIN order o
ON d.id = o.delivery_id
LEFT JOIN settlement s
ON d.id = s.delivery_id
WHERE d.id = *deliveryId*
GROUP BY d.id;
最可能的解釋是部分交叉產品。結算的一行從交付和/或訂單中匹配到多行。然後,在執行彙總時,結算中有多行復制行。刪除GROUP BY和SUM聚合,運行查詢,您將看到發生了什麼。 – spencer7593
我試着在沒有GROUP BY和SUM的情況下運行gthe查詢,並在交付時測試了2個訂單和1個結算附加到它。就像你說的那樣,它返回2行,一行包含order1的order_amount和settlement_amount,另一行包含order2的order_amount和相同的settlement_amount。這就解釋了爲什麼SUM給了我一個雙重價值。有什麼辦法可以解決這個問題嗎? – Feanor
一種方法是將每個表的聚合(SUM)分開進行,作爲單獨的查詢。要合併這些查詢,請將每個查詢包裝在parens中,然後在另一個查詢中使用整個子查詢代替表引用。 – spencer7593