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 (...)