当前位置:  开发笔记 > 后端 > 正文

SQL查询抛出"不在聚合函数或group by子句"异常

如何解决《SQL查询抛出"不在聚合函数或groupby子句"异常》经验,为你挑选了1个好方法。

我正在修复我们的项目的测试套件,正在通过Hibernate/DBUnit进行测试.有几个测试用例都会从Hibernate中抛出类似的异常,看起来像这样:

java.sql.SQLException:不在聚合函数或group by子句中:org.hsqldb.Expression @ 109062e在语句[... blah ...]中

通过我的谷歌搜索,我怀疑这是由我们使用聚合函数AVG()引起的,因为这是在异常的消息中,并且所有抛出的查询都包含它.但是,我发现了几个链接,这些链接指向获得此错误的人,并且能够通过注释掉"ORDER BY"或"GROUP BY"子句,或者通过在分组中包含SELECT子句中的其他列来修复它.我明白为什么这会修复这样的错误信息,但我不确定它是否适用于我的情况,因为我尝试做同样的事情并没有任何区别.此外,我们有一些测试用例抛出使用ORDER/GROUP的异常,但不是全部.例如:

ThingerVO myThinger = (ThingerVO)session.createQuery("SELECT new ThingerVO(" +
"r.id, " + "u.id, " + "u.alias, " + "s.id, " +
"s.name, " + "r.URL," + "AVG(v.rating), " +
"r.totalCount, " + "r.isPrivate, " + "a.id, " +
"a.name, " + "r.transactionId, " + "r.size, " +
"u.hasPicture " +
") FROM Thinger r LEFT OUTER JOIN r.votes as v, Table1S s " +
"JOIN s.Table2A AS a, User u " +
"WHERE r.userId = u.id AND " +
"s.id = r.Table1SId AND " +
"r.id = :thingId")    
.setInteger("thingId", thingId)
.uniqueResult();

此查询还会导致抛出相同的异常,即使它不使用ORDER/GROUP子句.此外,我将生成的HSQL代码从Hibernate直接剪切/粘贴到MySQL查询浏览器中,并且运行没有问题.此外,值得指出的是,所有这些代码在我们的生产数据库上运行良好,所以我真的很困惑它为什么会抛出这里.

其他一些可能有用的信息 - 我们使用的是扁平的XML数据库结构,其中有一些用于测试用例的虚拟测试数据,以及用于休眠的MySQL方言.我们正在使用dbunit 2.4.3/hibernate 3.2.6.我尝试使用最新的hibernate,版本3.3.1,但它的行为相同.

任何指针或提示将不胜感激.



1> AJ...:

如果AVG()在SQL查询的SELECT部分​​中使用聚合函数(例如)以及其他非聚合表达式,则必须具有GROUP BY子句,该子句应列出所有非聚合表达式.

我不熟悉java,但看看代码,看起来它会创建和运行这样的查询(不太正确,但我认为足够接近):

SELECT r.id, 
       u.id,
       u.alias,
       s.id, 
       s.name, 
       r.URL, 
       AVG(v.rating), 
       r.totalCount, 
       r.isPrivate, 
       a.id, 
       a.name, 
       r.transactionId,
       r.size, 
       u.hasPicture 
FROM Thinger r 
LEFT OUTER JOIN r.votes as v, 
                     Table1S s 
JOIN s.Table2A AS a, User u 
WHERE r.userId = u.id 
AND s.id = r.Table1SId 
AND r.id = :thingId

...这没有GROUP BY,但确实在SELECT子句中混合了聚合和非聚合表达式.问题是SQL格式错误.

修复将添加GROUP BY到查询的末尾.

我不能说为什么这在你的生产系统中起作用,但我怀疑那里有一些细微的差别.也许是GROUP BY自动添加的东西?

你可以发布它执行的SQL的打印输出吗?

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有