Kha*_*ino 4 grails hibernate criteria hibernate-criteria nhibernate-projections
我正在使用Grails Criteria(类似于hibernate标准)来获取给定表中每个部门中获得最高分的学生列表.而我想要的只是Name,Division和Grade领域.
Name | Division | Grade | Std_id
---------------------------------
AA1 | A | 2 | 1
AA2 | A | 4 | 2
BB1 | B | 2 | 3
BB2 | B | 5 | 4
Run Code Online (Sandbox Code Playgroud)
我想要的结果是
Name | Division | Grade |
--------------------------
AA2 | A | 4 |
BB2 | B | 5 |
Run Code Online (Sandbox Code Playgroud)
如果我使用以下标准
def criteria = Student.createCriteria()
def resultlt = criteria.list {
projections {
groupProperty('divison')
max('grade')
}
}
Run Code Online (Sandbox Code Playgroud)
我只拿到了Division和Grade,不包括其他领域.我也需要Name场.
如果我改变了标准(在投影中一起使用了聚合函数和属性)
def criteria = Student.createCriteria()
def resultlt = criteria.list {
projections {
property('name')
groupProperty('divison')
max('grade')
}
}
Run Code Online (Sandbox Code Playgroud)
它给出以下错误..
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)
Run Code Online (Sandbox Code Playgroud)
这是一个常见的聚合问题.所选字段必须出现在GROUP BY子句[*]中.正如我所看到的,您的Division列和Name列组合是无与伦比的,因此您需要以另一种方式执行此操作.我认为您需要子查询以满足上述条件.
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |