Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我如何从两个不同的表格细节中求和?_Sql_Join_Group By_Sum - Fatal编程技术网

Sql 我如何从两个不同的表格细节中求和?

Sql 我如何从两个不同的表格细节中求和?,sql,join,group-by,sum,Sql,Join,Group By,Sum,我有一个问题,我需要汇总账户表中的总余额和贷款表中的贷款总额,还需要列出客户表中的所有贷款名称 在我的解决方案中,它加在一起,但在第一行它会加倍 select c.CustomerName, sum(a.balance), sum(l.amount) from Customers as c left join Account as a on c.CustomerID=a.CustomerID left join Loan as l on c.CustomerID=l.Cust

我有一个问题,我需要汇总账户表中的总余额和贷款表中的贷款总额,还需要列出客户表中的所有贷款名称

在我的解决方案中,它加在一起,但在第一行它会加倍

select c.CustomerName, 
sum(a.balance), 
sum(l.amount) 

from Customers as c 

left join Account as a 
on c.CustomerID=a.CustomerID 

left join Loan as l 
on c.CustomerID=l.CustomerID  

group by c.CustomerID

使用聚合进行单独连接:

select c.CustomerName, a.balance, l.amount
from Customers c left join
     (select customerid, sum(balance) as balance
      from Account
      group by customerid
     ) a 
     on a.customerid = c.customerid left join
     (select customerid, sum(amount) as amount
      from Loan
      group by customerid
     ) l
     on l.customerid = c.customerid;

在每个联接上都有多行匹配,因此最终会多次合计相同的数量

为了避免这一点,考虑子查询中的预聚合,然后加入:

select c.customername, a.sum_balance, l.sum_amount
from customers c
left join (select customerid, sum(balance) sum_balance from account group by customerid) a 
    on a.customerid = c.customerid 
left join (select customerid, sum(amount) sum_amount from loan group by customerid) l 
    on l.customerid = c.CustomerID 

非常感谢,这对我很有用。你能解释一下我为什么需要这个集合吗?当我需要这样使用它的时候。我正在练习考试,在那里我将没有数据库来检查它只需要写它。那我怎么知道什么时候需要用这种方法呢?还有,为什么我不需要在sum(balance)sum_balance之后使用“as”?@Laura:正如所解释的,两个表中都有多行匹配。您可以在不进行聚合的情况下运行原始查询,并查看结果以更好地了解问题:
从客户中选择*作为c上的c左加入帐户作为a。CustomerID=a。CustomerID作为c上的l左加入贷款。CustomerID=l.CustomerID
。说明:如果客户有两个帐户A1和A2以及三个贷款L1、L2,L3,在客户ID上加入它们,得到六行A1/L1、A1/L2、A1/L3、A2/L1、A2/L2、A2/L3,因为账户和贷款没有进一步的关联。如果你聚集这些行,你考虑每个帐户三次和每个贷款两次。您要做的是将账户金额和贷款金额合并,因此在合并之前先进行合计。我希望这有助于你理解这个问题。