8.17.6 GROUP BY節およびHAVING節
GROUP BY節では,クエリの結果をグループごとにまとめます。また,HAVING節では,クエリ結果をさらに絞り込むための条件指定ができます。グループを指定した上で,HAVING節の条件を指定してください。
クエリにWHERE節とGROUP BY節の両方が含まれる場合,WHERE節が最初に実行され,その後,GROUP BY節で形式を整えてHAVING節に従ってフィルタリングします。
SELECT節に現れる集合関数以外のアイテムは,GROUP BY節にも指定する必要があります。グルーピングでは,null値も含めて条件として扱います。GROUP BY節およびHAVING節の注意事項について説明します。
-
エンティティによるグルーピングはできますが,シリアライズしたフィールドや,lobフィールドを含むことはできません。CJPAプロバイダでは,指定した場合には例外が発生します。
-
HAVING節にはグループアイテムに対する検索条件を指定するため,グループアイテムに適用する集合関数を指定する必要があります。CJPAプロバイダでは,検索条件の指定がない場合は例外が発生します。
-
GROUP BY節がない状態でHAVING節は使用しないでください。使用した場合は例外が発生します。
GROUP BY節およびHAVING節の記述例を次に示します。
SELECT e.department.departmentId FROM Employee AS e GROUP BY e.department.departmentId HAVING COUNT(e.department.departmentId) <= 2
なお,GROUP BY節およびHAVING節の構文については,「付録G JPQLのBNF」を参照してください。