14.12. group by 節
集約値を返すクエリは、返されるクラスやコンポーネントのプロパティによってグループ化できます:
select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color
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
select foo.id, avg(name), max(name)
from Foo foo join foo.names name
group by foo.id
having 節も使えます。
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)
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)
基盤のデータベースがサポートしている場合、
having と order by 節で SQL 関数と集約関数が使えます(例えば MySQL にはありません)。
group by 節や order by 節に算術式を含むことができません。また、Hibernate は今のところグループエンティティを拡張しないため、cat の全てのプロパティが非集合体の場合、group by cat を書くことはできません。全ての非集合体のプロパティを明示的にリストする必要があります。