如何在where子句中查找多列的总和

问题描述 投票:0回答:1

在我的应用程序中,我有一个会计表,其中包含金额、付费金额、罚款等列。在这里,我需要通过添加这 3 列并将其与零匹配来查找余额为零的帐户。 下面是我的 hql 查询,结果出现错误。

query = session.createQuery("FROM Accounts where accountId = :accId and SUM(amount + paidAmount + fine) = 0 order by name");

错误为:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not extract ResultSet
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1613)
    .......
    ... 106 more
    Caused by: java.sql.SQLException: Invalid use of group function
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
    at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
    ... 121 more

如何使用 HQL 查询执行此 where 条件

java mysql hibernate hql
1个回答
3
投票

您有一个简单的语法错误。

您的查询应该是:

query = session.createQuery("FROM Accounts where accountId = :accId and (amount + paidAmount + fine) = 0 order by name");

SUM()
不能这样使用。

或者您可能正在尝试做一些相当于:

SELECT * FROM `table`  GROUP BY <some_column> HAVING SUM(column1+column2)>0 ORDER BY column_name ASC

如果是这种情况,您可以使用

GROUP BY
HAVING

© www.soinside.com 2019 - 2024. All rights reserved.