我在Grails应用程序中有两个类, Employee 对另一个名为投票
的类具有hasMany(一对多关系)class Employee {
String employeeName
static hasMany = [votes:Vote]
}
并且投票类有voteRank整数属性,所有员工按1-10的等级投票,每个员工都包含其他员工给出的这些投票的列表
class Vote {
Integer voteRank
static belongsTo =[employee:Employee]
}
如何获得每位员工所有选票的平均值。这可以通过使用group by子句在SQL中解决。但我正在为这个问题寻找grails域映射和面向gorm的答案。
答案 0 :(得分:4)
此HQL查询将起作用:
def averages = Employee.executeQuery(
'select e, avg(vote.voteRank) ' +
'from Employee e join e.votes vote ' +
'group by e')
这将返回List
Object[]
个数组,其中第一个元素是Employee
,第二个是平均值。如果您不想返回整个Employee
实例,可以选择一个或多个属性:
def averages = Employee.executeQuery(
'select e.employeeName, avg(vote.voteRank) ' +
'from Employee e join e.votes vote ' +
'group by e')
答案 1 :(得分:2)
您可以使用Employee域类上的简单方法完成此操作。
class Employee {
String employeeName
static hasMany = [votes: Vote]
def sumVotes() {
votes.voteRank.sum() / votes.size()
}
}