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,因为账户和贷款没有进一步的关联。如果你聚集这些行,你考虑每个帐户三次和每个贷款两次。您要做的是将账户金额和贷款金额合并,因此在合并之前先进行合计。我希望这有助于你理解这个问题。