gpt4 book ai didi

orm - 使用 JPQL 限制子查询

转载 作者:行者123 更新时间:2023-12-01 11:57:06 25 4
gpt4 key购买 nike

我想通过 JPA2 获取前 100 种产品的平均价格。查询应该看起来像这样(我的 sql 有点生疏):

select avg(price) from (
select p.price from Product p order by p.price desc limit 100)

但这根本不起作用。我也试过这个:

select avg(p.price) from Product p where p.id = 
(select pj.id from Product pj order by pj.price desc limit 100)

这一直有效到 limit 关键字。

我读到限制在 JPQL 中不可用。

知道如何做到这一点吗?标准也可以。

最佳答案

JPQL 支持“LIMIT”。以下是使用 Criteria-API 的示例代码。

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Double> criteriaQuery = builder.createQuery(Double.class);
Root<Product> productRoot = criteriaQuery.from(Product.class);
criteriaQuery.select(builder.avg(productRoot.get("price")));
criteriaQuery.orderBy(builder.desc(productRoot.get("price"));
Double average = (Double)entityManager.createQuery(criteriaQuery).setMaxResults(100).getSingleResult();

Double average = (Double)entityManager.createQuery("select avg(p.price) from Product p order by p.price").setMaxResults(100).getSingleResult();

如果这不起作用,则必须执行两个查询 - 选择明确排序的记录,然后对它们进行平均。

如果可移植性不是问题,则使用 native 查询,可以使用单个查询完成相同的操作,因为许多 RDBMS 支持限制从数据库中获取的结果数量。

关于orm - 使用 JPQL 限制子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6011561/

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