如何划分两个HQL计数结果?

时间:2013-08-12 20:33:03

标签: spring hibernate grails hql grails-2.0

我想计算不活跃人数的百分比除以活跃人数的百分比。

我将执行类似以下HQL查询的操作,但它不起作用:

(select count(x) from People as x where x.active=false) / 
(select count(x) from People as x where x.active=true)

我该怎么做?

4 个答案:

答案 0 :(得分:1)

您可以使用group by子句来表达这一点。以下是您在Grails中的表现方式:

def countByAction = People.
    executeQuery("select active, count(*) from People group by active")*.
    toList().
    collectEntries{it}
println (countByAction[true])
println (countByAction[false])

答案 1 :(得分:1)

这样的事情应该有效

String hql = "select count(x)/(select count(x) from People as x where x.active=true) 
                 from People as x where x.active=false";

Long result = (Long) em.createQuery(hql).getSingleResult();

注意:以上是未经测试的

答案 2 :(得分:0)

由于您使用的是HQL表达式,我假设您正在使用Hibernate。在这种情况下,我建议您使用@Formula注释。您可以在此处找到更多信息:

答案 3 :(得分:0)

我使用 countBy * 动态方法,该方法使用域类的属性来查询匹配记录数的计数。见http://grails.org/doc/latest/ref/Domain%20Classes/countBy.html