JPA Criteria API - SubQuery

JPA Criteria API - SubQuery
I9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
0

Cześć,
Próbuję zrobić zapytanie

Kopiuj
select max(liczba) from (
		SELECT issuer_id, count(1) as liczba FROM INVOICE 
		group by issuer_id
		order by count(issuer_id) desc
	)
);

Zrobiłem podzapytanie:

Kopiuj
public void t4() {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<Tuple> mainQuery = cb.createQuery(Tuple.class);
        Root<Invoice> root = mainQuery.from(Invoice.class);
        mainQuery.groupBy(root.get("invoiceIssuer"));
        mainQuery.orderBy(cb.desc(cb.count(root.get("invoiceIssuer"))));
        mainQuery.multiselect(root.get("invoiceIssuer"), cb.count(root.get("invoiceIssuer")));
        List<Tuple> results = entityManager.createQuery(mainQuery).getResultList();
        results.forEach(System.out::println);

    }

Jednak nie wiem, czy w klauzuli from mogę dodać podzapytanie. Próbowałem już gemini,copilot, chatgpt, blackboxa, ale każdy wygenerowany przez nie przykład jest błędny.

Zakładam, że źle do tego podchodzę.

Docelowo chciałem osiąnąć takie zapytanie, które wykaże firmy z największą ilością wystawionych faktur.

Kopiuj
SELECT issuer_id, count(1) as liczba FROM INVOICE 
group by issuer_id
having count(1) = (

	select max(liczba) from (
		SELECT issuer_id, count(1) as liczba FROM INVOICE 
		group by issuer_id
		order by count(issuer_id) desc
    	)
	);

Jednak stwierdziłem, że zacznę od przygotowania prostszego podzapytania.

Byłym bardzo wdzięczny za każdą podpowiedź, dziękuję.

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2787

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.