我有一个名为rating的表格如下:
id | score | article_id
得分可以是1到5。
我想要一个单独的查询,返回得分为5,得分为4,得分为3,得分为2,得分为1的数量。因为我不想为此任务运行5个查询。 如果查询可以返回如下地图将是方便的:
关键是分数从1到5
该分数的相应数字
有没有办法(或类似)实现这一目标? 我正在使用Java JPA,MySQL 5.x
答案 0 :(得分:3)
创建返回类型为Object []的普通查询,如:
Query query = entityManager.createQuery("Select count(r), r.score from Rating r group by r.score");
然后:
List<Object[]> results = query.getResultList();
并且您可以迭代它并从results[0]
和results[1]
答案 1 :(得分:1)
以下是使用CriteriaQuery
的解决方案:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> query = cb.createQuery(Object[].class);
Root<Rating> rating = query.from(Rating.class);
query.multiselect(rating.get("score"), cb.count(rating)).groupBy(rating.get("score"));
List<Object[]> results = em.createQuery(query).getResultList();
System.out.println("score | count\n-----------");
for(Object[] object : results){
System.out.println(object[0] + " | " + object[1]);
}
这假设您的评级实体类名称为Rating
。