表达式不在聚合或 GROUP BY 列中 异常

Posted

技术标签:

【中文标题】表达式不在聚合或 GROUP BY 列中 异常【英文标题】:Expression not in aggregate or GROUP BY columns Exception 【发布时间】:2017-05-24 06:33:01 【问题描述】:

我在MS-Access 数据库中有一个名为ItemRates 的表,其中包含ItemID, ItemName, TotalFeet, RatePerItem, TotalRate 列,并且该数据库与我的java 应用程序相连。

当我运行以下查询时

String sql = "SELECT SUM(TotalRate) AS ItemRateSum, TotalFeet FROM ItemRates";

我得到以下异常

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.7 expression not in aggregate or
GROUP BY columns: PUBLIC.ITEMRATES.TOTALFEET

我在*** 上看到了与此异常相关的其他问题,并且一个接受的答案建议在查询末尾添加GroupBy 子句。我添加了一个GroupBy 子句

String sql = "SELECT SUM(TotalRate) AS ItemRateSum, TotalFeet FROM 
ItemRates GROUPBY ItemName";

我得到了几乎相同的异常(冒号后面的两个异常之间略有不同)

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.7 expression not in aggregate or 
GROUP BY columns: GROUPBY.TOTALFEET

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

正确的语法是:

SELECT SUM(TotalRate) AS ItemRateSum, TotalFeet
FROM ItemRates
GROUP BY TotalFeet;

TotalFeet不是聚合函数的参数,所以它需要在GROUP BY中。

【讨论】:

解决了这个问题。一旦时间限制结束,将接受答案。感谢您的回复。【参考方案2】:

所有被选中但不属于聚合函数的列必须包含在 group by 子句中

【讨论】:

从 ItemRates GROUPBY ItemName 中选择 SUM(TotalRate) 作为 ItemRateSum

以上是关于表达式不在聚合或 GROUP BY 列中 异常的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中并且包含非聚合

ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列

#1055 - SELECT 列表的表达式不在 GROUP BY 子句中,并且包含非聚合列,这与 sql_mode=only_full_group_by 不兼容

org.apache.spark.sql.AnalysisException:表达式 't2.`sum_click_passed`' 既不在 group by 中,也不是聚合函数

MySQL 5.0.12 - 列表不在 GROUP BY 子句中并且包含非聚合列?

选择列表中的无效表达式(不包含在聚合函数或 GROUP BY 子句中)