使用连接和分组时,sql SUM值不正确

时间:2012-08-14 18:26:25

标签: sql

我正在编写一个查询,该查询对按产品组细分的订单值进行求和 - 问题是,当我添加连接时,聚合的SUM会大大夸大 - 我假设它是因为它添加了重复的行。我有点新的SQL,但我认为它是因为我需要用子选择或嵌套连接构造查询?

所有数据都按预期返回,我的联接会提取所需的数据,但返回的SUM(inv.item_total)AS值要高得多 - 下面的SQL

SELECT  so.Company_id, SUM(inv.item_total) AS Value, co.company_name,
agents.short_desc, stock_type.short_desc AS Type


FROM SORDER as so

JOIN company AS co ON co.company_id = so.company_id
JOIN invoice AS inv ON inv.Sorder_id = so.Sorder_id
JOIN sorder_item AS soitem ON soitem.sorder_id = so.Sorder_id
JOIN STOCK AS stock ON stock.stock_id = soitem.stock_id
JOIN stock_type AS stock_type ON stock_type.stype_id = stock.stype_id
JOIN AGENTS AS AGENTS ON agents.agent_id = co.agent_id

WHERE
 co.last_ordered >'01-JAN-2012' and so.Sotype_id='1'


GROUP BY so.Company_id,co.company_name,agents.short_desc, stock_type.short_desc

我应该如何构建此查询以提取“非重复”SUM(inv.item_total)AS值非常感谢。

2 个答案:

答案 0 :(得分:0)

要获得准确的总和,您只需要所需的连接。所以,这个版本应该有效:

SELECT so.Company_id, SUM(inv.item_total) AS Value, co.company_name
FROM SORDER so JOIN
     company co
     ON co.company_id = so.company_id JOIN
     invoice inv
     ON inv.Sorder_id = so.Sorder_id
group by so.Company_id, co.company_name

然后,您可以一次添加一个连接,以查看乘法发生的位置。我猜这与代理人有关。

答案 1 :(得分:-1)

听起来连接不准确。

首先怀疑加入

例如,代理商是按company还是按invoice

如果是每个订单,那么连接是否应该是

JOIN AGENTS AS AGENTS ON agents.agent_id = inv.agent_id

第二次怀疑加入

一个order可以同时拥有多个items和多个invoices吗?这也可能导致问题。假设一个订单有3个项目,并发出3个发票。根据您的联接,同一项目将显示3次意味着总共9个行项目应该只有3.您可能需要消除invoices

自行解决此问题的可能方法:

我会删除所有分组和总和,看看是否可以按一张发票过滤,为所有数据生成一组唯一的行。

从只有一个项目的发票开始,检查结果集的准确性。如果可行,则添加另一个具有多个发票并检查行的发票,以查看是否获得了完美的数据集。如果没有,那么具有重复值的列(公司名称,项目名称,代理名称等)通常是检查重复项显示原因的良好起点。