hibernate – 是否可以在Projections,Criteria,Grails中使用聚合函数和属性?

我使用Grails Criteria(类似于hibernate标准)来获取给定表中每个部门中获得最高分的学生列表.我只想要姓名,分部和成绩字段.

Name | Division | Grade | Std_id
---------------------------------
AA1  | A        |  2     | 1
AA2  | A        |  4     | 2
BB1  | B        |  2     | 3
BB2  | B        |  5     | 4

我想要的结果是

Name | Division | Grade |
--------------------------
AA2  | A        |  4     |
BB2  | B        |  5     | 

如果我使用以下标准

    def criteria = Student.createCriteria()
    def resultlt = criteria.list {
        projections {
            groupProperty('divison')
            max('grade')             
        }
    }

我只有分部和成绩,其他领域不包括在内.我也需要名字字段.

如果我改变了标准(在投影中一起使用了聚合函数和属性)

    def criteria = Student.createCriteria()
    def resultlt = criteria.list {
        projections {
            property('name')
            groupProperty('divison')
            max('grade')

        }
    }

它给出以下错误..

ERROR: column "this_.name" must appear in the GROUP BY clause or be
 used in an aggregate function
  Position: 63. Stacktrace follows:
org.postgresql.util.PSQLException: ERROR: column "this_.name" must
appear in the GROUP BY clause or be used in an aggregate function
  Position: 63
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryEx
ecutorImpl.java:2161)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutor
Impl.java:1890)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.ja
va:255)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Stat
ement.java:559)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(Abstract
Jdbc2Statement.java:417)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc
2Statement.java:302)
最佳答案
这是一个常见的聚合问题.所选字段必须出现在GROUP BY子句[*]中.正如我所看到的,您的Division列和Name列组合是无与伦比的,因此您需要以另一种方式执行此操作.我认为您需要子查询以满足上述条件.

转载注明原文:hibernate – 是否可以在Projections,Criteria,Grails中使用聚合函数和属性? - 代码日志