querydsl transformer group by count

Wouter Willems picture Wouter Willems · Nov 3, 2014 · Viewed 17k times · Source

I am stuck trying to get a query (QueryDSL) to work that gives me a count of distinct categories. For example, what I am trying to achieve:

categoryA -> 10 entries
categoryB -> 20 entries

This is what i have so far:

query().from(application)
            .transform(groupBy(application.category).as(list(application)));

However, this gives me for each category a list of all whole entries, I just want to get a count of this.

I tried messing around with count() but no luck.

Anybody know how to do this?

Answer

SputNick picture SputNick · Oct 13, 2015

Note that as of Querydsl 4.x, the accepted answer by Timo Westkämper is no longer valid. Breaking changes in Querydsl 4.0 have removed the query.list() method.

A solution working with Querydsl 4.0+ would now be:

query.from(application)
     .groupBy(application.category)
     .select(application.category, application.category.count())
     .fetch();