在 JPQL 中使用 JOIN 和 SUM 进行选择



我想在仪表板中查询数据提取信息。我有两个实体:用户和帖子,它们是多对多关系。在我的查询中,我想通过每个帖子中的 rol 获取帖子信息和用户数量。

我已经尝试过这个查询,它正在工作,但是当有一个没有用户的帖子时,它不会出现在结果集中,它应该是"|帖子1 |资讯 |0 |0 |"。

@Query("SELECT new com.project.dto.DashboardDTO("
+ "post.title, "
+ "post.information, "
+ "SUM(CASE WHEN u.rol = 0 THEN 1 ELSE 0 END), "
+ "SUM(CASE WHEN u.rol = 1 THEN 1 ELSE 0 END)) "
+ "FROM Post post JOIN post.users u "
+ "GROUP BY post.title, post.information")
Page<DashboardDTO> getDashboard(Pageable pageable);

我必须解决什么问题?

您需要使用left join而不是join,您将获得所需的结果。

此外,如果您需要获取每个帖子的摘要详细信息,您可以按帖子 ID 而不是(标题、信息(进行分组,因为它们在功能上都依赖于 id。 查询将是:

@Query("SELECT new com.project.dto.DashboardDTO("
+ "post.title, "
+ "post.information, "
+ "SUM(CASE WHEN u.rol = 0 THEN 1 ELSE 0 END), "
+ "SUM(CASE WHEN u.rol = 1 THEN 1 ELSE 0 END)) "
+ "FROM Post post LEFT JOIN post.users u "
+ "GROUP BY post")
Page<DashboardDTO> getDashboard(Pageable pageable);

最新更新