[英]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. 这个想法是带回订单的总价格,包括邮资。
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.