多表和子表的SUM

时间:2013-07-05 00:11:21

标签: mysql foreign-keys sum multiple-tables

我需要在MySQL中为这个查询创建JOIN语法:

SELECT 
    TblSupplier.SupplierName AS SupplierName, 
    (SUM(TblBuy.TotalBuy) - SUM(TblReturn.TotalReturn)) AS Total 
    (SUM(TblPayment.TotalPaymentToday) - SUM(TblReturnItem.TotalReturnToday)) AS TotalPayment, 
    ((SUM(TblBuy.TotalBuy) - SUM(TblReturn.TotalReturn)) - (SUM(TblPayment.TotalPaymentToday) - SUM(TblReturnItem.TotalReturnToday))) AS Balance 
FROM ... 
GROUP BY TblSupplier.ID

但我不知道怎么做......

This is my ER Diagram

我的问题示例:

  

INSERT INTO TableSupplier(ID,SupplierName)VALUES(1,'Company A'),(2,'Company B');

     

INSERT INTO TableBuy(ID,SupplierID,TotalBuy)VALUES   (1,1,100),   (2,1,200),   (3,2,50),   (4,2,100),   (5,2,50);

     

INSERT INTO TablePayment(ID,BuyID,TotalPaymentToday)VALUES   (1,1,50),   (2,3,50);

     

INSERT INTO TableReturn(ID,SupplierID,TotalReturn)值   (1,1,20),   (2,2,30),   (3,2,10);

     

INSERT INTO TableReturnItem(ID,ReturnID,TotalReturnToday)VALUES   (1,1,10),   (2,2,30);

我按照这个例子,得到了这个结果:

  

的MySQL>选择
      - > ts.SupplierName AS SupplierName,
      - > (SUM(tb.TotalBuy) - SUM(tr.TotalReturn))AS总计,
      - > (SUM(tp.TotalPaymentToday) - SUM(tri.TotalReturnToday))AS TotalPayment,
      - > ((SUM(tb.TotalBuy) - SUM(tr.TotalReturn)) -
      - > (SUM(tp.TotalPaymentToday) - SUM(tri.TotalReturnToday)))AS Balance
      - >来自tableupplier ts
      - >内部联接tablebuy tb on ts.id = tb.id
      - >内部联接tablereturn tr on ts.id = tr.id
      - >内部联接tablepayment tp on ts.id = tp.id
      - >内部联接tablereturnitem tri on ts.id = tri.id
      - > group by ts.id;

  供应商名称|总计| TotalPayment |平衡
  ------------------------------------------------- <登记/>   公司A | 80 | 40 | 40
  公司B | 170 | 20 | 150

我想要的结果是:

  

SupplierName |总计| TotalPayment |平衡
  ------------------------------------------------- <登记/>   公司A | 280 | 40 | 240
  公司B | 160 | 20 | 140

1 个答案:

答案 0 :(得分:0)

试试这个:

select 
ts.SupplierName AS SupplierName, 
(SUM(tb.TotalBuy) - SUM(tr.TotalReturn)) AS Total 
(SUM(tp.TotalPaymentToday) - SUM(tri.TotalReturnToday)) AS TotalPayment, 
((SUM(tb.TotalBuy) - SUM(tr.TotalReturn)) - 
(SUM(tp.TotalPaymentToday) -     SUM(tri.TotalReturnToday))) AS Balance 
from tablesupplier ts
inner join tablebuy tb on ts.id=tb.supplierid
inner join tablereturn tr on ts.id=tr.supplierid
inner join tablepayment tp on tb.id=tp.buyid
inner join tablereturnitem tri on tr.id=tri.returnid
group by ts.id