JPA Criteria API - SubQuery

JPA Criteria API - SubQuery
I9
  • Rejestracja:około 14 lat
  • Ostatnio:około miesiąc
  • 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ę.


lato-zima.pl
while(question != true) {
ask();
}
Escanor16
Skoro wszystko co Ci te AI wygenerowały jest błędne to znaczy, że źle im pytania zadajesz :V
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:2787
1

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.