Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[Feature Request] - Support pagination (fetchPage) for GROUP BY aggregation queries #1257

Open
Labels
enhancementNew feature or request
@ChanWunsam

Description

@ChanWunsam

Reason

I would like to request support for usingfetchPage() withGROUP BY aggregation queries.

In many real-world scenarios, we need to perform aggregation queries with pagination, such as:

  • Statistical reports grouped by dimensions (e.g., sales by region, enrollments by university)
  • Leaderboards and rankings
  • Dashboard analytics with large datasets
  • Any aggregated data that needs to be displayed in paginated tables

Currently, Jimmer doesn't supportfetchPage() on queries withgroupBy(), which forces us to either:

  1. Fetch all aggregated results and paginate in memory (inefficient for large datasets)
  2. Manually write separate COUNT and data queries (loses the convenience of Jimmer's API)

Description

Example Use Case

Scenario: Display a paginated list of universities and their enrollment counts for an activity.

publicPage<ActivityUniversityEnrollDTO>queryUniversityEnrollNum(longactivityId,@NullableStringuniversityName,Pageablepageable) {UserActivityActionTableuaa =Tables.USER_ACTIVITY_ACTION_TABLE;UserTableuser =Tables.USER_TABLE;varuserIds =jSqlClient            .createSubQuery(uaa)            .where(uaa.activityId().eq(activityId))            .where(uaa.actionType().eq(UserActivityActionTypeEnum.SUBMIT_FORM))            .select(uaa.userId());// Would like this to work ✨returnjSqlClient            .createQuery(user)            .where(user.id().in(userIds))            .where(user.university().isNotNull())            .whereIf(universityName !=null && !universityName.trim().isEmpty(),                    () ->user.university().like("%" +universityName +"%"))            .groupBy(user.university())            .orderBy(SpringOrders.toOrders(user,pageable.getSort()))            .select(ActivityUniversityEnrollDTOMapper.university(user.university())                            .enrolledCount(user.count()))            .fetchPage(pageable.getPageNumber(),pageable.getPageSize());}

Expected SQL Generation

WhenfetchPage() is called on agroupBy() query, Jimmer could generate:

COUNT Query:

SELECTCOUNT(*)FROM (SELECTu.universityFROM user uWHEREu.idIN (...)ANDu.universityIS NOT NULLGROUP BYu.university)AS grouped_results

Data Query:

SELECTu.university,COUNT(*)as enrolled_countFROM user uWHEREu.idIN (...)ANDu.universityIS NOT NULLGROUP BYu.universityORDER BY enrolled_countDESCLIMIT10 OFFSET0

Current Limitation

Currently, callingfetchPage() on agroupBy() query throws:

IllegalStateException: The current query uses group by clause, it cannot be reselected

Existing solutions

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp