Ahs*_*san 3 mysql database join sum
我一直在尝试使用 3 个表格制作资产负债表。第一个表是供应商名称。第二个表是应付供应商,第三个表是支付给供应商,两者都与供应商表的外键相连。
我期待这样的结果:
供应商名称----------------------- 到期------------------------ - - - - 支付
name------------------- sum (数量*单价) ------------------sum (支付金额)
我的查询是
SELECT
tbl_supplier.supplier_name AS supplier,
SUM(tbl_payment.pay_amount) AS payment,
SUM(tbl_stock.stock_qnt * tbl_stock.stock_up) AS due
FROM
tbl_supplier
INNER JOIN
tbl_payment ON tbl_supplier.id = tbl_payment.supplier_id
INNER JOIN
tbl_stock ON tbl_supplier.id = tbl_stock.supplier_id
GROUP BY supplier_name
Run Code Online (Sandbox Code Playgroud)
但结果是到期金额乘以付款数量,反之亦然。
例如,如果供应商的应付总额为 1000,并且他已收到 3 次付款,则显示的应付总额为 3000,而不是 1000。
请帮忙。谢谢
你不能join
存货和付款表。在join
将每一行的结合tbl_payment
,在每排tbl_stock
3行中,所以tbl_payment
,你会得到1个原始行中tbl_stock
3次,再总结了这些。Distinct
不是一个解决方案,因为它会忽略不明显的值,例如,如果您实际上有 2 次支付 100 美元,那么您将有不同的 100 美元总和(因为 100 美元和 100 美元是相同的值)。
您可以使用subquerys单独计算的款项(这是一个隐含join
的tbl_supplier
同tbl_payment
和tbl_supplier
同tbl_stocks
,但不是所有的三个个人在一起):
SELECT
tbl_supplier.supplier_name AS supplier,
(select sum(tbl_payment.pay_amount)
from tbl_payment
where tbl_payment.supplier_id = tbl_supplier.id) as payment,
(select sum(tbl_stock.stock_qnt * tbl_stock.stock_up)
from tbl_stock
where tbl_stock.supplier_id = tbl_supplier.id) as due
from tbl_supplier;
Run Code Online (Sandbox Code Playgroud)