【问题标题】:MySQL sum from two joined tables and multiple rows - need to bring out total or all rows来自两个连接表和多行的 MySQL 总和 - 需要带出总行或所有行
【发布时间】:2012-12-09 17:50:39
【问题描述】:

我有以下查询,在显示每个订单的总价格时可以正常工作(感谢 stackoverflow 社区):

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 - 包括所有订购的商品(因此可以有多行)
  • orders - 包括订单的邮费(这里每个订单只有一行)

非常感谢您的任何帮助。

【问题讨论】:

  • 如果您可以分享您的表结构,一些示例数据作为所需输出的示例,将会很有帮助。
  • 您想要total_price 的总和?
  • 嗨,是的,我正在寻找 total_price 的总和。
  • 好的,所以下面 BLUEFEET 的答案可以满足您的需求。你一定试过了。
  • 根据需要添加表结构和输出示例数据,理解问题

标签: mysql join sum


【解决方案1】:

也许我遗漏了一些东西,但是你不能把它放在一个子查询中以获得所有订单的总数吗:

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 ;

您还可以使用 group by 修饰符 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 ;

【讨论】:

  • 这正是我所需要的——谢谢。很好的解决方案,清晰易懂
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 2011-12-09
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
相关资源
最近更新 更多