如何通过分组进行条件查询

问题描述 投票:0回答:1
select CreatedBy, count(*) as cnt
from fourwheelerquoteresponse
group by CreatedBy
order by count(*) desc
limit 5;

这是我的sql,根据JPA Criteria API,我仍然想要用它这是我的查询,它不考虑分组就返回整个列表。

@Override
public List<FourWheelerQuoteResponseEntity> findAllByTopOrLow(String createdBy) {
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<FourWheelerQuoteResponseEntity> criteriaQuery = criteriaBuilder.createQuery(FourWheelerQuoteResponseEntity.class);
    Root<FourWheelerQuoteResponseEntity> root = criteriaQuery.from(FourWheelerQuoteResponseEntity.class);
    Expression<String> groupByExp = root.get("createdBy").as(String.class);
    Expression<Long> countExp = criteriaBuilder.count(groupByExp);
    CriteriaQuery<FourWheelerQuoteResponseEntity> select =
    criteriaQuery.multiselect(groupByExp, countExp);
    criteriaQuery.groupBy(groupByExp);
    criteriaQuery.orderBy(criteriaBuilder.desc(countExp));

    criteriaQuery.select(root)
     .where(criteriaBuilder.equal(root.get("createdBy"), createdBy));

    try {
        return entityManager.createQuery(select).getResultList();   
    } catch (NoResultException nre) {
        return null;
    } catch (NonUniqueResultException nure) {
        return null;
    }
}

选择CreatedBy,count(*)作为四轮车报价响应组中的cnt,按CreatedBy顺序乘count(*)desc限制5;这是我的SQL,根据JPA Criteria API,我仍然希望使用它...

hibernate jpa criteria-api
1个回答
0
投票

用于在MySQL(?)或Hibernate上表达查询的语法非常相似:

© www.soinside.com 2019 - 2024. All rights reserved.