Java 有没有一种方法可以选择使用;最大(字段1、字段2)“;其中字段1和字段2是同一选择中的合计数?

Java 有没有一种方法可以选择使用;最大(字段1、字段2)“;其中字段1和字段2是同一选择中的合计数?,java,hibernate,hql,Java,Hibernate,Hql,我有一个java应用程序调用用HQL编写的查询,调用postgres。问题是我希望能够聚合(求和)两个字段,然后投影这些聚合中的“最大值”。有关psql“最伟大”的文档,请参阅 这可能吗 我认为您可以通过将最大值投影为内部select的输出来执行所谓的“嵌套聚合”查询?但是,如果可以在不嵌套的情况下编写,那么它将是首选 select u.id, sum(foo.stat1) as stat1Sum, sum(foo.stat2) as stat2Sum, greatest(stat1Sum, s

我有一个java应用程序调用用HQL编写的查询,调用postgres。问题是我希望能够聚合(求和)两个字段,然后投影这些聚合中的“最大值”。有关psql“最伟大”的文档,请参阅

这可能吗

我认为您可以通过将最大值投影为内部select的输出来执行所谓的“嵌套聚合”查询?但是,如果可以在不嵌套的情况下编写,那么它将是首选

select u.id, sum(foo.stat1) as stat1Sum, sum(foo.stat2) as stat2Sum, greatest(stat1Sum, stat2Sum)
from u, foo
where u.id = foo.uid
group by id
运行“我的查询”会导致以下错误:

Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 
 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'GREATEST' {originalText=GREATEST}
    \-[EXPR_LIST] SqlNode: 'exprList'
       +-[IDENT] IdentNode: 'archiveBytesTotal' {originalText=archiveBytesTotal}
       \-[IDENT] IdentNode: 'selectedBytesTotal' {originalText=selectedBytesTotal}
我不认为我在mapping对象上犯了任何错误,我认为问题在于hibernate无法派生我用于求和聚合的别名类型


谢谢你的阅读

HQL支持的聚合函数有:

avg(...), sum(...), min(...), max(...)

count(*)

count(...), count(distinct ...), count(all...)

请参见

支持的HQL聚合函数包括:

avg(...), sum(...), min(...), max(...)

count(*)

count(...), count(distinct ...), count(all...)

请参见

如果是重写查询的选项,您可以尝试,它支持您需要的功能。

如果是重写查询的选项,您可以尝试,它支持您需要的功能。

。我被误导了,最大的特点是深造而不是冬眠。谢谢啊,开枪。我被误导了,最大的特点是深造而不是冬眠。谢谢