Sql 第二个表中的JPQL平均顺序
背景 我使用Hibernate保存了两个对象。产品和投票 Product对象包含投票列表,例如Sql 第二个表中的JPQL平均顺序,sql,hibernate,jpa,jpql,Sql,Hibernate,Jpa,Jpql,背景 我使用Hibernate保存了两个对象。产品和投票 Product对象包含投票列表,例如 public class Product { @javax.persistence.Id @javax.persistence.GeneratedValue public Long id; String name; @OneToMany(mappedBy = "product", cascade = CascadeType.ALL) List<
public class Product {
@javax.persistence.Id
@javax.persistence.GeneratedValue
public Long id;
String name;
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
List<Vote> votes;
}
这很好,在我的数据库中,我可以看到预期的产品和投票。
现在,我想编写一个JPQL查询,以最高平均投票数的顺序对产品进行排序
我使用纯SQL实现了这一点,如下所示
select p.name
from product p
order by (select avg(score) from vote v where p.id = v.product_id) desc;
问题
在我的JPQL查询中,我似乎无法实现这一点。我刚刚收到一个错误,说“意外的AST节点”。
我使用的JPQL是
select p from Product p
order by (select avg(score) from Vote v where p.id = v.product) desc
JPQL不支持内部select语句吗?这可能会起作用:
SELECT p FROM Product p LEFT JOIN P.votes v
GROUP BY p ORDER BY AVG(v.score) desc
成功了,谢谢。我尝试了类似的方法,但遗漏了GROUPBY子句,该子句只返回一个结果。我想是时候复习一下我的SQL知识了。
SELECT p FROM Product p LEFT JOIN P.votes v
GROUP BY p ORDER BY AVG(v.score) desc