Dans JPQL Je veux construire la requête équivalente à ceci:OpenJPA: comment construire un GROUP BY requête avec un groupe compte
select *, count(*) as finger_count from page_delta_summary
where delta_history_id = ? and change_type = ? group by fingerprint;
où fingerprint
est un champ varchar dans le tableau page_delta_summary
. Ce que j'est le suivant:
select d, count(d) as finger_count from PageDeltaSummary d
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType
GROUP BY d.fingerprint"
où PageDeltaSummary
est mon entité. Mais je reçois l'exception suivante:
org.apache.openjpa.persistence.ArgumentException: Votre requête sur le type "class com.su3analytics.sitedelta.model.PageDeltaSummary" avec filtre "select d, count (d) from PageDeltaSummary d où d.deltaHistoryId =: deltaHistoryId et d.type =: pageDeltaType GROUP BY d.fingerprint "n'est pas valide. Vos clauses select et having ne doivent contenir que des agrégats ou des valeurs qui apparaissent également dans votre clause de regroupement.
La requête fonctionne correctement si je supprime count (d) en tant que finger_count ou GROUP BY.
Des suggestions?
Merci
merci pour la réponse. mais pourquoi mon sql original n'a-t-il pas de sens? Je peux l'exécuter directement sans problème. –
@Richard: Je me demande quelle base de données le supporte. Typiquement, la clause SELECT ne peut utiliser que les mêmes champs que dans la clause GROUP BY ou des fonctions d'agrégation dans d'autres champs. – axtavt
J'utilise MySQL, c'est tellement intéressant qu'il est supporté –