Si la requête retourne des valeurs aggrégées, celles ci peuvent être groupées par propriété ou composant :
select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color
select foo.id, avg(name), max(name) from Foo foo join foo.names name group by foo.id
Une clause having
est aussi permise.
select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color having cat.color in (eg.Color.TABBY, eg.Color.BLACK)
Les fonctions SQL et les fonctions d'aggrégations sont permises dans les clauses having
et order by
, si elles sont supportées par la base de données (ce que ne fait pas MySQL par exemple).
select cat from Cat cat join cat.kittens kitten group by cat.id, cat.name, cat.other, cat.properties having avg(kitten.weight) > 100 order by count(kitten) asc, sum(kitten.weight) desc
Notez que ni la clause group by
ni la clause order by
ne peuvent contenir d'expressions arithmétiques.