【问题标题】:MySQL sum from two joined tables and multiple rows来自两个连接表和多行的 MySQL 总和
【发布时间】:2012-12-09 03:23:49
【问题描述】:

我对以下查询有疑问:

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

我遇到的问题是,如果订单在“ordered_items”中包含多个项目,则上述总和会多次计算“订单”中的邮资。

如何重写此查询,使邮资只计算一次?

非常感谢您的任何帮助。

【问题讨论】:

  • 您是按orders 表中的PK 分组吗?如果是这样,只需将邮资移至SUM()之外。
  • 我错过了 GROUP BY 关闭,但是只需将邮资移到 SUM() 作品之外。非常感谢您的帮助。

标签: mysql join sum


【解决方案1】:

您不需要子查询,只需将 postage_price 和 vat 从聚合中移出并按它们分组:

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 

【讨论】:

  • 这几乎奏效了,但我不得不将 'GROUP BY orders.postage_price, orders.postage_vat' 替换为 'GROUP BY orders.id_orders' - 现在可以正常工作了。非常感谢您的帮助。
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    你需要添加分组

    GROUP BY ordered_items.order_id
    

    【讨论】:

    • 是的,很抱歉,我无意中错过了声明中的内容
    猜你喜欢
    • 2012-12-09
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多