MySQL では、2 つの SQL ステートメント (実行) で、目的の列、グループ、および順序レコードの最大値を選択し、結果を制限し、合計行数を取得できます。
SELECT SQL_CALC_FOUND_ROWS b.class, b.age FROM (
SELECT students.*, max(age) FROM `students`GROUP BY class LIMIT 0,10
) as b;
SELECT FOUND_ROWS() as total;
250 件のレコードから合計 24 件が選択されますが、これは正しいです。(24 のユニークなクラス)
グループ化されたレコードを選択できますが、合計数を取得する方法がわかりません。また、結果は List< List< Student > + MAX(age) > となります。ただし、groupBy と max() を使用しないと、期待どおりに List< Student > が生成されます。
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery q = qb.createQuery();
Root e = q.from(Student.class);
Expression maxExpression = qb.max(e.get("age"));
CriteriaQuery<Object> cq = q.multiselect(e, maxExpression);
cb.groupBy(e.get("class"));
TypedQuery typedQuery = em.createQuery(cb);
List<Student> students = typedQuery.getResultList();
リストとしてJPA2で同じ結果を得ることは可能ですか?