简体   繁体   English

MySQL总和来自两个连接表和多行

[英]MySQL sum from two joined tables and multiple rows

I am having a problem with the following query: 我遇到以下问题的问题:

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

The idea is to bring back the total price of an order including the postage. 这个想法是带回订单的总价格,包括邮资。

  • ordered_items - includes all the items ordered (so there can be multiple rows) ordered_items - 包括所有订购的商品(因此可以有多行)
  • orders - includes the postage price of the order (there will only ever be one row per order here) 订单 - 包括订单的邮资价格(此处每个订单只会有一行)

The problem I'm having is that if an order contains multiple items in 'ordered_items' the above sum counts the postage in 'orders' multiple times. 我遇到的问题是,如果订单在'ordered_items'中包含多个项目,则上述总和会多次计算“订单”中的邮资。

How can I rewrite this query so the postage is only counted once? 如何重写此查询以便邮资只计算一次?

Many thanks in advance for any help. 非常感谢您的帮助。

You don't need a subquery, you just need to move the postage_price and vat out of the aggregate and GROUP BY them: 您不需要子查询,只需将postage_price和vat移出聚合和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 

您需要添加分组

GROUP BY ordered_items.order_id
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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM