我在春天为一个大学项目工作。我必须开发一个允许用户创建"会议的系统。 我已经映射了User和Rendezvous(Meeting)之间的关系,如下所示:
用户(1)< ---(0 ... *) Rendezvous
@Entity
@Access(AccessType.PROPERTY)
public class Rendezvous extends DomainEntity {
private User user;
@NotNull
@Valid
@ManyToOne(optional = false)
public User getUser() {
return this.user;
}
public void setUser(final User user) {
this.user = user;
}
}
我需要知道每个用户创建的rendezvouses的平均值和标准差,因此我尝试创建一个查询来执行此操作。
我需要在mySQL中对这一个进行等效查询,但是在JPQL中
select avg(rendezvouses) from (
select user_id, count(*) as rendezvouses
from rendezvous group by user_id
) nestedQuery;
答案 0 :(得分:1)
如果我理解正确,您需要获得所有用户的平均集合点以及每个用户的集合点数。
根据JSR-338 - Java Persistence 2.1中定义的JPA 2.1规范,JPQL AVG函数的参数必须是数字。
此外,您将无法在JPQL中引用子查询(没有/ exists构造AFAIK)。
因此,您应创建一个查询以获取集合点的总数
select count(r.id) from rendezvous r
然后除以用户数。
然后您可以获得每个用户的集合点数:
select count(r.id) from rendezvous r group by r.user.id
鉴于此,我建议使用sql查询(本机查询)而不是jpql查询。 JPA / JPQL更适合处理对象而不是精细调优的SQL查询。
例如,您可以轻松获得标准偏差: