如何仅对连接表中的值求和一次

时间:2016-06-23 22:23:59

标签: sql sql-server

我有两张桌子

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)

如何为零件提供正确的值?

更新:我想要第一个表中的所有行。因此,即使客户在第二张表中没有任何部分,我也希望看到所有订单。

2 个答案:

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