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