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);
我想查询仪表板中的提取信息。我有两个实体: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);