2017-07-07 85 views
2

我正在改写这个问题,因为Gordon Linoff告诉我,如果我编辑另一个,它可能会失败 - 所以这不是重复的,只是一个更正。Sum Expression Aggregate Error

我想写一个代码,将总结所有的订单,当我填写查询出现的价格。例如,如果我输入ID范围1-60,我希望有一个总和列创建,然后总结ID的1-60的所有价格。

我认为它会很简单,只需创建一个SUM(.....)AS Exp 1,但它告诉我ID和聚合函数有问题。

我希望能够看到各个价格,以及所有这些价格总和的新列。我打算在稍后向表中添加更多的数据列。

我当前的代码如下所示:

SELECT table.ID, table.Price, SUM(table.Price) AS Exp 1 
FROM table 
WHERE table.ID BETWEEN StartID AND EndID 

感谢您的帮助

+0

添加一个“分组依据”与未被聚合的列。 –

+0

你应该删除你的其他问题。 – SandPiper

回答

1

你必须与你总语句的概念错误。运行此查询时,WHERE子句将首先评估排除不在用户指定的开始点和结束点之间的所有ID。然后,您错过了GROUP BY子句以告诉它需要分组的内容。消除table.Price字段,否则您将获得每个价格的唯一记录,这不是您想要的。

SELECT t.ID, SUM(t.Price) AS Price_Summary 
FROM table t 
WHERE t.ID BETWEEN StartID AND EndID 
GROUP BY t.ID 

此外,别名将有助于提高可读性。

编辑

我认为这可能是你正在尝试去,但我仍然不清楚。

SELECT t.ID, SUM(t.Price) AS Price_Summary, 
    (SELECT SUM(t2.Price) FROM table t2 WHERE t2.ID BETWEEN StartID AND EndID) AS Total_Price 
FROM table t 
WHERE t.ID BETWEEN StartID AND EndID 
GROUP BY t.ID 

这会给你所有的ID的结果集,一切都与该ID,然后总和的价格的总和。所以它看起来是这样的:

ID | Price_Summary | Total_Price 
1 10    60 
2 30    60 
3 20    60 
+0

这很好,但我试图总结每个ID的价格(为了得到我的总金额)。如果我想这样做,我会摆脱GROUP BY命令,以便在单独的列中的一个单元格中显示一个巨大的总数? – nola94

+0

纠正我上面的评论,我试图简单地删除组命令,它给了我的身份证的聚合错误。我认为这会奏效,但我想我错了。你有什么建议吗? – nola94

+0

要获得总数,请从SELECT子句中删除t.ID,并完全删除GROUP BY子句。 – SandPiper