Sql 第二个表中的JPQL平均顺序

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<

背景

我使用Hibernate保存了两个对象。产品和投票

Product对象包含投票列表,例如

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