2009-01-28 6 views
0

J'ai la structure de classe suivante FlowerDAO avec les champs (cartographiée à l'aide Hibernate):HQL groupe à l'aide de requêtes par

  • id
  • prixUnitaire
  • Nom
  • couleur

    Comment je crée une requête hql pour obtenir la fleur (s) pour chaque couleur qui a (ve) le prix unitaire minimum sur cette couleur?

J'ai essayé, mais cela ne fonctionne pas

from FlowerDAO as f where f.unitPrice<= (select min(f2.unitPrice) from FlowerDAO as f2 where f2.color=f.color) 
group by f.color 

Répondre

2

Je soupçonne que le problème compare une valeur unique à un ensemble de résultats. Essayez de remplacer le < = avec un « in », de sorte que votre requête va lire:

from FlowerDAO as f 
    where f.unitPrice in 
    (select min(f2.unitPrice) from FlowerDAO as f2 where f2.color=f.color) 

, j'ai également supprimé le « groupe par » de la fin, puisque ce ne fournira un résultat pour chaque couleur, et vous mentionnez dans la question fleur (s). Vous pouvez utiliser

order by f.color 

à la place?