我有两张桌子
ID CUST ORDER
=============
1 1 1
2 1 1
3 1 1
ID CUST PARTS1 PARTS2
=====================
1 1 5 3
我想要的回报是
CUST ORDERS PARTS
=================
1 3 8
我目前使用的选项是
SELECT Distinct(o.cust),
orders=sum(order),
parts=sum(p.parts1 + p.parts2)
FROM orders as o
left join parts p on o.cust = p.cust
GROUP BY o.cust
问题是该客户的订单表中的每一行的零件总和。而不是8个部分,我得到24(3 * 8)
如何为零件提供正确的值?
更新:我想要第一个表中的所有行。因此,即使客户在第二张表中没有任何部分,我也希望看到所有订单。
答案 0 :(得分:1)
首先进行聚合,然后进行连接:
SELECT o.cust, o.orders,
sum(p.parts1 + p.parts2) as parts
FROM (select o.cust, sum(order) as orders
from orders o
group by o.cust
) o left join
parts p
on o.cust = p.cust
GROUP BY o.cust, o.orders;
答案 1 :(得分:0)
[0] train-error:0.000921+0.000343 test-error:0.001228+0.000687
[1] train-error:0.001075+0.000172 test-error:0.001228+0.000687