gpt4 book ai didi

java - 如何在 JPQL 中嵌套聚合函数

转载 作者:行者123 更新时间:2023-12-02 11:36:59 24 4
gpt4 key购买 nike

我在 Spring 为一个大学项目工作。我必须开发一个允许用户创建“ session ”的系统。我已经映射了 User 和 Rendezvous(Meeting) 之间的关系,如下所示:

用户 (1) <--- (0...*) 集合点

@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;
}

}

我需要知道每个用户创建的集合点的平均值和标准差,因此我尝试创建一个查询来执行此操作。

我需要在 mySQL 中但在 JPQL 中进行与此等效的查询

    select avg(rendezvouses) from (
select user_id, count(*) as rendezvouses
from rendezvous group by user_id
) nestedQuery;

最佳答案

如果我理解正确,您需要获取所有用户的平均集合点以及每个用户的集合点数量。

根据 JSR-338 - Java Persistence 2.1 中定义的 JPA 2.1 规范, JPQL AVG 函数的参数必须是数字。

此外,您将无法在 JPQL 中引用子查询(据我所知,没有/exists 构造)。

因此您应该创建一个查询来获取集合点的总数

select count(r.id) from rendezvous r

然后除以用户数量。

然后您可以获得每个用户的集合点数量:

select count(r.id) from rendezvous r group by r.user.id

鉴于此,我建议使用 sql 查询( native 查询)而不是 jpql 查询。 JPA/JPQL 更适合处理对象,而不是精细调整的 sql 查询。

例如,您可以轻松获得标准差:

SQL - STDEVP or STDEV and how to use it?

关于java - 如何在 JPQL 中嵌套聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48867874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com