2010-11-12 5 views
2

HQL prend-il en charge les expressions conditionnelles dans les fonctions d'agrégation?hql expressions conditionnelles dans les fonctions d'agrégat

Je voudrais faire quelque chose comme ça

select 
    o.id, 
    count(o), 
    count(o.something is null and o.otherthing = :other) 
from objects o 

mais je reçois un MissingTokenException de l'analyseur Antlr.

EDIT: En utilisant un sous-requête il fonctionne, mais il est moche comme je suis groupant par plusieurs variables ...

Répondre

2

Vous pouvez utiliser des expressions dans HQL. Pour ce cas, vous aurez envie d'utiliser SUM au lieu de COUNT comme suit:

select 
    o.id, 
    count(o), 
    sum(case when o.something is null and o.otherthing = :other then 1 else 0 end) 
from objects o 

Quand le match de conditionals, la somme recevra un 1 pour cette ligne. Quand ils ne correspondent pas, ils recevront un zéro. Cela devrait fournir la même fonctionnalité que COUNT.

Questions connexes