2012-12-22 39 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 

但是我也想把所有订单总数加在一起。我尝试过脱掉GROUP BY,但是这返回了错误的价格。我认为它正确地加入了所有项目,但是只添加了一个邮资。

  • ordered_items - 包括订购(因此可以有多个行)
  • 订单的所有物品 - 包括订单的运费价格(会有永远只能是每个订单一行在这里)

非常感谢您的帮助。

+0

如果您可以共享您的表结构,一些示例数据为期望的输出示例将是有帮助的。 – Joddy

+0

你想要'total_price'的总和? – Joddy

+0

嗨,是的,我正在寻找total_price的总和。 – markwilliamsweb

回答

2

也许我失去了一些东西,但是,你不能只是把这个在子查询中获得所有订单的总计:

SELECT sum(total_price) TotalAllOrders 
FROM 
(
    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 
) src ; 

您还可以通过修改使用组WITH ROLLUP兼得总数和每个订单的总和:

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 
    WITH ROLLUP ; 
+0

这正是我需要的 - 谢谢。好的解决方案,清楚明白 – wick3d