Cześć,
Próbuję zrobić zapytanie
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:
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.
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ę.