原理就像 StackOverFlow 一样 - 每个问题都有标签。我需要按最后一天的提及频率显示这些标签。
public List<TagDto> getAllTagsByCount() {
List<TagDto> tagDtos = new ArrayList<>();
try {
tagDtos = entityManager.createQuery("SELECT t.id, t.name FROM Tag t") // have no idea how to write such query
.unwrap(Query.class)
.setResultTransformer(new ResultTransformer() {
@Override
public Object transformTuple(Object[] objects, String[] strings) {
return TagDto.builder()
.id((Long) objects[0])
.name((String) objects[1])
.build();
}
@Override
public List transformList(List list) {
return list;
}
})
.getResultList();
} catch (Exception e) {
e.printStackTrace();
}
return tagDtos;
}
如果您需要一些额外的代码部分,请告诉我
最佳答案
您正在寻找的内容可能类似于以下内容
List<Tuple> tuple = entityManager.createQuery("SELECT t.name, COUNT(*) FROM Tag t WHERE t.date BETWEEN :yesterday AND :tomorrow GROUP BY t.name")
.setParameter("yesterday", LocalDateTime.now().minus(1, ChronoUnit.DAYS).with(LocalTime.of(0, 0, 0))
.setParameter("tomorrow", LocalDateTime.now().plus(1, ChronoUnit.DAYS).with(LocalTime.of(0, 0, 0))
.getResultList();
不过你似乎没有基本的 SQL 知识,所以我建议你先尝试学习 SQL。
关于java - 如何查询按计数分组的对象列表(按最后一天的提及频率),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62372358/