我“ SOMETIMES”在执行查询时在服务器日志上收到以下异常。查询有一个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
答案 0 :(得分:0)
请参见H2 DB - Column must be in Group By list。
在这种情况下,Apache Ignite十分严格,只允许将裸值放在SELECT列表中,而该列表也放在GROUP BY lisT中:
SELECT V1, V2, V3 FROM table GROUP BY V1, V2, V3
<-如果您从GROUP BY ==错误中删除了V1,V2或V3
所有其他值都需要包装在aggregate function中。
与SELECT MAX(_VAL), AVG("dailyRock"), "productId" ... GROUP BY "productId";
一样