首页 > 解决方案 > 加入表格时总和不正确

问题描述

在这里,我分别有 3 个表名 A、B、C,我想加入所有表并获取结果

为了获得所需的输出,我编写了这样的代码

SELECT  A.date as d_date,B.agent_name,    
    (SELECT SUM(B.profit) FROM B WHERE A.id = B.bill_id) AS total_profit,      
    SUM(C.total_price) AS t_price,SUM(C.total_dc) AS t_dc    
FROM A LEFT JOIN B ON A.id=B.bill_id    
       LEFT JOIN C ON C.data_id=B.id    
WHERE DATE(A.date) BETWEEN '{$start_date}' AND '{$end_date}' 
    AND A.customerid=406   
GROUP BY Date(A.date),A.customerid
ORDER BY A.id;

问题是从表中获取Purchase值作为列的第一个值。profitB

我希望我想要的输出是这样的

Name    Date          Purchase   t_price   t_dc
Ned     2019-07-26      210.60         80      40

但我变得这样了

Name    Date          Purchase   t_price   t_dc
Ned     2019-07-26      15.60      80       40

这是演示http://sqlfiddle.com/#!9/c85a910/3

标签: phpmysqljoinsum

解决方案


这里的问题是,表 C 有 2 行,并且都有data_idas 67159。因此,当您将其与表 B 连接时,它将计算bill_id 67159两次利润。您必须使用一个条件才能仅选择 1 行。我已将您的查询更新为 -

SELECT  A.date as d_date,B.agent_name, SUM(B.profit) AS total_profit,      
    SUM(C.total_price) AS t_price,SUM(C.total_dc) AS t_dc    
FROM A LEFT JOIN B ON A.id=B.bill_id
                   AND A.customerid = B.user_id
       LEFT JOIN C ON C.data_id=B.id    
WHERE DATE(A.date) BETWEEN '2019-07-26' AND '2019-07-26' 
    AND A.customerid=406   
GROUP BY Date(A.date),B.agent_name
ORDER BY A.id;

这个查询给出了total_profitas 226.2


推荐阅读