1

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で同じ結果を得ることは可能ですか?

4

0 に答える 0