You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HQL的WHERE子句中实现多列求和筛选

问题分析与解决方案

错误原因

你用到的SUM()是聚合函数,SQL语法规定聚合函数不能直接放在WHERE子句中——WHERE用于过滤单条行数据,而聚合函数是对多行分组后的数据进行计算,只能出现在SELECT或HAVING子句里,这就是报错Invalid use of group function的核心原因。

正确写法分两种场景:

场景1:筛选单条账户记录中amount + paidAmount + fine之和为0的行

这是最常见的需求,此时不需要聚合函数,直接计算三个字段的和即可:

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

注意给字段和加上括号,避免运算优先级问题。

场景2:按accountId分组后,筛选分组内所有记录的amount + paidAmount + fine总和为0的账户

如果一个accountId对应多条Accounts记录,需要统计分组总和,就要用GROUP BY配合HAVING子句:

// GROUP BY需要包含SELECT中所有非聚合字段(比如name),否则会触发数据库语法检查错误
query = session.createQuery("SELECT a FROM Accounts a WHERE a.accountId = :accId GROUP BY a.accountId, a.name HAVING SUM(a.amount + a.paidAmount + a.fine) = 0 ORDER BY a.name");

内容的提问来源于stack exchange,提问作者KJEjava48

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:47:37