连接两个表并对两个表中的列求和
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。
使用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。