group by
a le même rôle qu'en SQL : elle permet de regrouper les résultats d'une sélection en paquets, sur certaines propriétés. Sur chacun de ces paquets, on peut appliquer une ou plusieurs fonctions d'agrégations sur les propriétés restantes.
La clause
having
permet ensuite de sélectionner les résultats des agrégations, en fonction de leurs valeurs.
Écrivons un exemple d'une telle requête.
Exemple 55. Agrégation JPQL
select bateau.nom, AVG(marin.salaire), COUNT(marin)
from Bateau bateau join bateau.equipage marin
having count(marin) > 10
AVG
: calcule la valeur moyenne ;
COUNT
: retourne le nombre de valeurs ;
MAX
et
MIN
: retourne la plus grande et la plus petite des valeurs ;
SUM
: retourne la somme des valeurs.