Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

querydsl transformer group by count

Tags:

java

sql

querydsl

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?

like image 910
Wouter Willems Avatar asked Nov 03 '14 21:11

Wouter Willems


2 Answers

transform combined groupBy is meant to construct tree structures out of flat result sets. What you need can be easier expressed as

query.from(application)
     .groupBy(application.category)
     .list(application.category, application.category.count())
like image 125
Timo Westkämper Avatar answered Sep 22 '22 13:09

Timo Westkämper


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();
like image 28
SputNick Avatar answered Sep 20 '22 13:09

SputNick