2015-06-09 52 views
0

所以我有表cont_selling如何在MySQL SUM列左加入

--------------------------------- 
cont_selling_id |  date | 
--------------------------------- 
    1   | 2015-05-24 | 
    2   | 2015-06-06 | 
--------------------------------- 

表02 cont_sold

---------------------------------------------------- 
    cont_sold_id | cont_selling_id |  price | 
    --------------------------------------------------- 
     1   |   1   |  10 | 
     2   |   1   |  10 | 
     3   |   1   |  30 | 
     4   |   2   |  20 | 
     5   |   2   |  10 | 
    -------------------------------------------------- 

和表03 支付

---------------------------------------------- 
payment_id | cont_selling_id |  paid | 
----------------------------------------------- 
    1  |   1  |  10 | 
    2  |   2  |  10 | 
    3  |   1  |  20 | 
    4  |   1  |  10 | 
    5  |   2  |  10 | 
----------------------------------------------- 

现在我需要根据

现在我想合并基于所有这三个表cont_sellingcont_selling_id

,并要总结cont_sold表价格列和支付表支付列

要选择表

这就是我想要做的

期待输出

--------------------------------------------- 
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 

这上面的查询IM这样

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

你能显示结果你? – Jens

+0

@Jens我添加了这个问题的输出。请检查它,谢谢 – Munna

回答

1

这里怎么可以使用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; 
+0

这个查询是简单和真棒...:D – Munna

1

获得输出这个未经测试的查询应该工作:

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 

您必须创建临时表格,因为您的表格对于价格和付款之间没有依赖关系。

1

你应该与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 

样品结果SQL Fiddle