Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
Mysql 使用sql sum函数得到错误的结果_Mysql_Sql_Sql Server - Fatal编程技术网

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;