14.12. La clause group by

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.