Mysql 使用sql sum函数得到错误的结果
我有三张桌子:Mysql 使用sql sum函数得到错误的结果,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有三张桌子: select c.c_name, sum(s.net_amount) - sum(cp.recived_amount) as amount from customer_payments cp inner join customer c on c.c_id = cp.customer_id inner join sale s on s.cId = c.cId group by c.c_name having sum
select
c.c_name,
sum(s.net_amount) - sum(cp.recived_amount) as amount
from customer_payments cp
inner join customer c
on c.c_id = cp.customer_id
inner join sale s
on s.cId = c.cId
group by
c.c_name
having
sum(cp.net_amount) - sum(recived_amount) !=0
我想把净金额和收到的金额相加,再减去两者。
通过内部联接,当我将两行相加时,它不会给出正确的结果。一个问题是,您为每个客户都得到一个笛卡尔积。另一个原因是,当没有匹配项时,可能会丢失行 您可以通过使用左连接和预聚合值来解决这些问题:
Customer(cId)(cName)
Sale(cId)(net_amount)
Customer_payment(cId)(received_amount)
实际上不需要外部聚合,除非给定客户具有多个相同名称的id。您使用的是SQL Server还是MySQL?请显示示例数据、预期结果和实际结果。如果有多个客户付款与销售相关,则销售数字将在您的结果中多次出现,而sales.net_金额的总和将比您可能预期的要大。
select c.c_name, sum(s.net_amount) - sum(cp.received_amount) as amount
from customer c left join
(select cp.customer_id, sum(cp.received_amount) as receivedamount
from customer_payments cp
group by cp.customer_id
) cp
on c.c_id = cp.customer_id left join
(select s.cId, sum(s.net_amount) as net_amount
from sale s
group by s.cId
) s
on s.cId = c.cId
group by c.c_name
having sum(cp.net_amount)-sum(received_amount) <> 0;