我想计算不活跃的人的百分比除以活跃的人的百分比。
我将执行类似以下 HQL 查询的操作,但它不起作用:
(select count(x) from People as x where x.active=false) /
(select count(x) from People as x where x.active=true)
我怎样才能做到这一点?
我想计算不活跃的人的百分比除以活跃的人的百分比。
我将执行类似以下 HQL 查询的操作,但它不起作用:
(select count(x) from People as x where x.active=false) /
(select count(x) from People as x where x.active=true)
我怎样才能做到这一点?
您可以使用 group by 子句来表达这一点。以下是您在 Grails 中的操作方法:
def countByAction = People.
executeQuery("select active, count(*) from People group by active")*.
toList().
collectEntries{it}
println (countByAction[true])
println (countByAction[false])
由于您使用的是 HQL 表达式,我假设您使用的是 Hibernate。在这种情况下,我建议您使用@Formula
注释。您可以在此处找到更多信息:
我使用countBy*动态方法,该方法使用域类的属性来查询匹配记录数的计数。见http://grails.org/doc/latest/ref/Domain%20Classes/countBy.html
像这样的东西应该工作
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();
注意:以上未经测试