连接两个表并对两个表中的列求和

Joining two Tables and summing columns in both

使用MySQL存储和查询一些数据。 我有两张桌子

Table A(费用清单): id, order_id, amount, rate

Table B(最终订单列表): id, order_id, total, rate

两个表中的比率均为百分比。 对于每个最终订单行,A 中有很多行成本。 我正在寻找的行为是输出 B 中所有行的利润总和,其中包括 A 的成本。

假设 A 的以下行:

1, 69, 420, 15
2, 69, 100, 20

以及 B 的行:

1, 69, 1000, 10
2, 70, 500, 30

数学看起来像

((1000 - (420 * 15 / 100) - (100 * 20 / 100)) * 10 / 100)
+
(500 * 30 / 100)

= 241.7

我可能可以通过子查询来完成这项工作,但我担心 B 中的行负载不会很快,每个行在 A 中都有 0-30 行关联,并且它将成为一个查询这经常发生。

感谢任何帮助,如果有什么需要澄清的,请告诉我! :)

使用 2 级聚合:

SELECT SUM((b.total - COALESCE(a.amount, 0)) * b.rate) / 100 total_profit
FROM tableB b 
LEFT JOIN (
  SELECT order_id, SUM(amount * rate) / 100 amount
  FROM tableA
  GROUP BY order_id
) a ON a.order_id = b.order_id;

参见demo