Как я могу сложить из двух разных данных таблицы? - PullRequest
2 голосов
/ 20 апреля 2020

У меня есть проблема, мне нужно подвести итоговый баланс, который находится в таблице Счета, а общая стоимость - это ссуда, которая находится в таблице Ссуды. Также необходимо указать все их имена, которые находятся на таблице Клиента.

С моим решением оно складывается правильно, но удваивает первый ряд.

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

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

У вас есть несколько строк, совпадающих в каждом соединении, поэтому в итоге вы получаете одинаковую сумму, которая суммируется более одного раза.

Чтобы избежать этого, рассмотрите возможность предварительной агрегации в подзапросах, а затем объедините:

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 
1 голос
/ 20 апреля 2020

Раздельное объединение с агрегацией:

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;
...