有时发生错误的奇怪组

Posted

技术标签:

【中文标题】有时发生错误的奇怪组【英文标题】:strange group by error occuring SOMETIMES 【发布时间】:2018-12-28 07:35:18 【问题描述】:

执行查询时,“有时”我的服务器日志中出现以下异常。 Query 有一个 group by 语句。如果我删除 GROUP BY,我永远不会得到异常。此外,并非所有使用 group by 的查询都会出现异常。他们中只有一部分是受害者。

我在集群中有两台服务器和一个客户端节点。

查询是否有任何问题,或者我是否遇到了错误,因为异常是随机发生的。奇怪的是,并不是所有的查询都有这个异常。我认为查询结构还可以。

Caused by: org.h2.jdbc.JdbcSQLException: Column "PR__Z0._VAL" must be in the GROUP BY list; SQL statement: 
SELECT 
PR__Z0._VAL __C0_0, 
PR__Z0."dailyRock" __C0_1, 
PR__Z0."productId" __C0_2 
FROM TABLE("category" CHAR=?1) T__Z2 
 INNER JOIN ACC_6185BAEEDA626000."ProductCategory" PC__Z1 
 ON TRUE 
 INNER JOIN ACC_6185BAEEDA626000."ProductRecord" PR__Z0 
 ON TRUE 
WHERE (PC__Z1."language" = ?2) AND ((PC__Z1."category" = T__Z2."category") AND (PR__Z0."productId" = PC__Z1."productId")) 
GROUP BY PR__Z0."productId" 
ORDER BY 2 DESC LIMIT ?3 + ?4 [90016-197] 
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) 
        at org.h2.message.DbException.get(DbException.java:179) 
        at org.h2.message.DbException.get(DbException.java:155) 
        at org.h2.expression.ExpressionColumn.updateAggregate(ExpressionColumn.java:172) 
        at org.h2.expression.Alias.updateAggregate(Alias.java:87) 
        at org.h2.command.dml.Select.queryGroup(Select.java:350) 
        at org.h2.command.dml.Select.queryWithoutCache(Select.java:628) 
        at org.h2.command.dml.Query.queryWithoutCacheLazyCheck(Query.java:114) 
        at org.h2.command.dml.Query.query(Query.java:352) 
        at org.h2.command.dml.Query.query(Query.java:333) 
        at org.h2.command.CommandContainer.query(CommandContainer.java:114) 
        at org.h2.command.Command.executeQuery(Command.java:202) 
        at org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:114) 
        at org.apache.ignite.internal.processors.query.h2.PreparedStatementExImpl.executeQuery(PreparedStatementExImpl.java:67) 
        at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:1421) 
        ... 7 more

【问题讨论】:

【参考方案1】:

见H2 DB - Column must be in Group By list。

Apache Ignite 在这方面是严格的,您只能将裸值放入您也放入 GROUP BY 列表的 SELECT 列表中:

SELECT V1, V2, V3 FROM table GROUP BY V1, V2, V3

所有其他值都需要包装在 aggregate function 中。

SELECT MAX(_VAL), AVG("dailyRock"), "productId" ... GROUP BY "productId";

【讨论】:

以上是关于有时发生错误的奇怪组的主要内容,如果未能解决你的问题,请参考以下文章

连接到 AD 的奇怪错误 - visual basic

我的 CSS 代码中的奇怪错误使文本随机获得巨大的“边距”

VC++ 2010:奇怪的关键部分错误

GTK Glade C - Treeview选择奇怪的段错误

AVCaptureSession 的奇怪错误

奇怪的 WCF net.tcp 异常