【问题标题】:Sum Expression Aggregate ErrorSum 表达式聚合错误
【发布时间】:2017-12-11 23:15:49
【问题描述】:

我正在重写这个问题,因为 Gordon Linoff 告诉我,如果我编辑另一个问题,它可能会显得粗鲁——所以这不是重复,只是更正。

我正在尝试编写一个代码来汇总我填写查询时出现的所有订单的价格。例如,如果我输入 ID 范围 1-60,我希望创建一个 sum 列,然后汇总 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

感谢您的帮助

【问题讨论】:

  • 添加一个Group By,其中包含未聚合的列。
  • 你应该删除你的其他问题。

标签: sql ms-access ms-access-2007


【解决方案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

【讨论】:

  • 这很好用,但我试图总结每个 ID 的价格(为了得到我的总金额)。如果我想这样做,我会去掉 GROUP BY 命令,以便它只在单独列的一个单元格中显示一个巨大的总数吗?
  • 更正我上面的评论,我试图通过命令简单地删除组,它给了我 ID 的聚合错误。我认为这会起作用,但我想我错了。你有什么建议吗?
  • 要获得总数,请从 SELECT 子句中删除 t.ID 并完全删除 GROUP BY 子句。
  • 很抱歉这么复杂,但这就是问题所在。我想查看每个 ID,每个 ID 的价格,然后是所有价格总和的另一列。
  • 这就是样本数据输出在您的问题中如此重要的原因。在我的回答中查看我的编辑,如果这不是您所追求的,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多