SQL 两项之和 TABLE
SQL SUM FROM TWO TABLE
我有两个名为 invoices 和 payments 的表..
我想对为该用户开出的所有发票求和,然后减去为该用户支付的所有款项。
$sql = "
SELECT bill_to_id
, SUM(invoices.invoice_total) - SUM(payments.amount) AS razlika
FROM invoices
JOIN payments
ON invoices.bill_to_id = payments.userID
GROUP
BY invoices.bill_to_id
";
$result = $conn->query($sql);
以上代码的结果对于总发票的 SUM 是可行的,但对于付款的 SUM 是不可行的。由于某种原因,它正在成倍增加..
发票数据库如下所示。
bill_to_id invoice_total
1 5000.00
2 3000.00
1 4000.00
1 2000.00
付款数据库如下所示
userID amount
1 1500
2 3000
你应该在2个表中分别聚合,然后执行连接。
但是,我相信 UNION ALL
:
更容易
SELECT bill_to_id, SUM(invoice_total) AS razlika
FROM (
SELECT i.bill_to_id, i.invoice_total
FROM invoices i
WHERE i.bill_to_id <> 1
AND EXISTS (SELECT 1 FROM uplate u WHERE u.idfirme = i.bill_to_id)
UNION ALL
SELECT u.idfirme, -u.iznos
FROM uplate u
WHERE u.idfirme <> 1
) t
GROUP BY bill_to_id
我假定所有付款都有相应的发票。
如果您想要总数,即使对于没有付款的发票,您也可以删除 AND EXISTS (...)
。
我有两个名为 invoices 和 payments 的表..
我想对为该用户开出的所有发票求和,然后减去为该用户支付的所有款项。
$sql = "
SELECT bill_to_id
, SUM(invoices.invoice_total) - SUM(payments.amount) AS razlika
FROM invoices
JOIN payments
ON invoices.bill_to_id = payments.userID
GROUP
BY invoices.bill_to_id
";
$result = $conn->query($sql);
以上代码的结果对于总发票的 SUM 是可行的,但对于付款的 SUM 是不可行的。由于某种原因,它正在成倍增加..
发票数据库如下所示。
bill_to_id invoice_total
1 5000.00
2 3000.00
1 4000.00
1 2000.00
付款数据库如下所示
userID amount
1 1500
2 3000
你应该在2个表中分别聚合,然后执行连接。
但是,我相信 UNION ALL
:
SELECT bill_to_id, SUM(invoice_total) AS razlika
FROM (
SELECT i.bill_to_id, i.invoice_total
FROM invoices i
WHERE i.bill_to_id <> 1
AND EXISTS (SELECT 1 FROM uplate u WHERE u.idfirme = i.bill_to_id)
UNION ALL
SELECT u.idfirme, -u.iznos
FROM uplate u
WHERE u.idfirme <> 1
) t
GROUP BY bill_to_id
我假定所有付款都有相应的发票。
如果您想要总数,即使对于没有付款的发票,您也可以删除 AND EXISTS (...)
。