2012-12-21 69 views
1

我有以下查詢一個問題:MySQL的總和連接表和多行

SELECT sum(((ordered_items.price + ordered_items.vat) * ordered_items.qty) + orders.postage_price + orders.postage_vat) as total_price 
FROM orders 
JOIN ordered_items 
ON orders.id_orders = ordered_items.order_id 
GROUP BY orders.id_orders 

的想法是帶回的訂單,包括運費的總價格。

  • ordered_items - 包括訂購(因此可以有多個行)
  • 訂單的所有物品 - 包括訂單的運費價格(會有永遠只能是每個訂單一行在這裏)

我遇到的問題是,如果訂單包含'ordered_items'中的多個項目,則上述總和會多次計入'訂單'中的郵資。

如何重寫此查詢以便郵資僅計算一次?

非常感謝您的任何幫助。

+1

你是否從'orders'表中的PK進行分組?如果是這樣,只需將郵資移到「SUM()」之外即可。 – eggyal

+0

我錯過了GROUP BY,但是隻是將郵資移到了SUM()作品之外。非常感謝您的幫助。 – markwilliamsweb

回答

2

你並不需要一個子查詢,你只需要移動postage_price和還原出來的骨料和GROUP BY的他們:

SELECT sum((ordered_items.price + ordered_items.vat) * ordered_items.qty) + orders.postage_price + orders.postage_vat as total_price 
FROM orders 
JOIN ordered_items 
ON orders.id_orders = ordered_items.order_id 
GROUP BY orders.postage_price, orders.postage_vat 
+0

這幾乎工作,但我不得不用'GROUP BY orders.postage_price,orders.postage_vat'替換爲'GROUP BY orders.id_orders' - 按我現在的想法工作。非常感謝您的幫助。 – markwilliamsweb

0
SELECT items.total + orders.postage_price + orders.postage_vat) AS total_price 
FROM orders 
JOIN (SELECT order_id, SUM((ordered_items.price + ordered_items.vat) * ordered_items.qty) AS total 
    FROM ordered_items 
    GROUP BY order_id) items 
ON orders.id_orders = items.order_id 
1

您需要添加分組

GROUP BY ordered_items.order_id 
+0

對不起,我錯過了那個意外的發言 – markwilliamsweb