【问题标题】:SELECT with JOIN And SUM in JPQL在 JPQL 中使用 JOIN 和 SUM 进行选择
【发布时间】:2020-09-13 07:04:02
【问题描述】:

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

我试过这个查询,它可以工作,但是当有一个没有用户的帖子时,它不会出现在结果集中,它应该是“| post1 | information | 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);

我要解决什么问题?

【问题讨论】:

    标签: mysql spring hibernate jpql


    【解决方案1】:

    你需要使用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);
    

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2015-10-02
      • 2014-01-13
      相关资源
      最近更新 更多