SELECT 在 JPQL 中使用 JOIN 和 SUM

SELECT with JOIN And SUM in JPQL

我想查询仪表板中的提取信息。我有两个实体:User 和 Post,它们是多对多关系。在我的查询中,我想获取 post 信息和每个 post.

中按角色分类的用户数

我已经尝试过这个查询,它正在运行,但是当 post 没有用户时,它不会出现在结果集中,它应该是“| post1 | 信息 | 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,您会得到想要的结果。

此外,如果您需要获取每个 post 的摘要详细信息,您可以按 post id 而不是 (title, information) 分组,因为它们在功能上都依赖于 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);