如何在MySQL左联接中求和列

如何在MySQL左联接中求和列,mysql,Mysql,所以我有桌子继续卖 表02(续) 及表03付款 现在我需要根据 现在我想根据cont\u selling table cont\u selling\u id列合并这三个表 并希望将cont_sell table price列和payment table payment列相加 这就是我想做的 期望输出 --------------------------------------------- cont_selling_id | price | paid | -----

所以我有桌子继续卖

表02(续)

及表03付款

现在我需要根据

现在我想根据cont\u selling table cont\u selling\u id列合并这三个表

并希望将cont_sell table price列和payment table payment列相加

这就是我想做的

期望输出

---------------------------------------------
cont_selling_id  |    price    |      paid   | 
---------------------------------------------
       1         |      50     |       40    | 
       2         |      30     |       20    | 
---------------------------------------------
所以我试着在mysql查询中这样做,但它给出了错误的求和结果

                    SELECT 

                    SUM(Z.price) as total, 
                    SUM(P.amount) as paid

                    FROM cont_selling S

                    LEFT JOIN cont_sold Z
                    ON S.cont_selling_id = Z.cont_selling_id

                    LEFT JOIN payment P
                    ON S.cont_selling_id = P.cont_selling_id    

                    GROUP BY S.cont_selling_id
对于上面的查询,我得到如下输出

---------------------------------------------
cont_selling_id  |    price    |      paid   | 
---------------------------------------------
       1         |      150    |       40    | 
       2         |      60     |      120    | 
---------------------------------------------

此未经测试的查询应该可以工作:

with a as(select  cont_selling_id  , sum(price) as totalprice from cont_sold group by cont_selling_id),
with a as(select  cont_selling_id  , sum(paid) as totalpaid from payment group by cont_selling_id),
select c.cont_selling_id , totalprice, totalpaid from cont_selling c left join a.count_selling_id = c.count_selling_id
left join b.count_selling_id = c.count_selling_id

您必须创建临时表,因为price表和paid表之间没有依赖关系。

此未经测试的查询应该可以工作:

with a as(select  cont_selling_id  , sum(price) as totalprice from cont_sold group by cont_selling_id),
with a as(select  cont_selling_id  , sum(paid) as totalpaid from payment group by cont_selling_id),
select c.cont_selling_id , totalprice, totalpaid from cont_selling c left join a.count_selling_id = c.count_selling_id
left join b.count_selling_id = c.count_selling_id

您必须创建临时表,因为price和paid表之间没有依赖关系。

您应该使用SUM进行两个不同的查询,然后将它们合并以获得所需的结果:

SELECT T1.cont_selling_id,T1.price,T2.paid
FROM
(SELECT c.cont_selling_id,SUM(cs.price) as price
 FROM cont_selling c LEFT JOIN
     cont_sold cs ON c.cont_selling_id=cs.cont_selling_id
 GROUP BY c.cont_selling_id) as T1 JOIN
(SELECT c.cont_selling_id,SUM(p.paid) as paid
 FROM cont_selling c LEFT JOIN
      payment p ON p.cont_selling_id=c.cont_selling_id
  GROUP BY c.cont_selling_id) as T2 ON T1.cont_selling_id=T2.cont_selling_id
结果:

cont_selling_id price   paid
----------------------------
1               50      40
2               30      20

示例结果输入。

您应该使用SUM进行两个不同的查询,然后将它们组合以获得所需的结果:

SELECT T1.cont_selling_id,T1.price,T2.paid
FROM
(SELECT c.cont_selling_id,SUM(cs.price) as price
 FROM cont_selling c LEFT JOIN
     cont_sold cs ON c.cont_selling_id=cs.cont_selling_id
 GROUP BY c.cont_selling_id) as T1 JOIN
(SELECT c.cont_selling_id,SUM(p.paid) as paid
 FROM cont_selling c LEFT JOIN
      payment p ON p.cont_selling_id=c.cont_selling_id
  GROUP BY c.cont_selling_id) as T2 ON T1.cont_selling_id=T2.cont_selling_id
结果:

cont_selling_id price   paid
----------------------------
1               50      40
2               30      20

示例结果。

这里介绍如何将aggegare部分用于内部查询,然后进行连接

select 
cs.cont_selling_id,
price,
paid
from cont_selling cs
left join(
 select sum(price) as price , cont_selling_id from cont_sold
 group by cont_selling_id
)x on x.cont_selling_id = cs.cont_selling_id,
left join(
 select sum(paid) as paid , cont_selling_id from payment
 group by cont_selling_id
)y
on y.cont_selling_id = cs.cont_selling_id; 

下面介绍如何将aggegare部分用于内部查询,然后进行连接

select 
cs.cont_selling_id,
price,
paid
from cont_selling cs
left join(
 select sum(price) as price , cont_selling_id from cont_sold
 group by cont_selling_id
)x on x.cont_selling_id = cs.cont_selling_id,
left join(
 select sum(paid) as paid , cont_selling_id from payment
 group by cont_selling_id
)y
on y.cont_selling_id = cs.cont_selling_id; 

你能展示你得到的结果吗?@Jens我已经用这个问题添加了我的输出。请检查一下,谢谢。你能展示一下你得到的结果吗?@Jens我已经用这个问题添加了我的输出。请检查一下,谢谢。这个问题很简单,也很好…:D这个问题很简单,也很好…:D