2011-03-14 68 views
2

我正在使用oracle和hibernate进行映射。我想用count()函数中的条件来计数。我的代码是:休眠,如何用条件计数

SELECT COUNT(情况下st.averageMark < su.gradePass然后1点否则为0结束) 从研究ST加入st.subject苏 其中st.acaYear在(2009年) 和ST。学期= 4 和su.idSeq = 1330 组由st.acaYear

代码返回我什么。我用sum而不是count它返回了一个结果,但它是错误的,结果比我想的要大。

提前致谢。

回答

7

我刚刚用下面的代码解决了这个问题。

select sum(case when st.averageMark >= su.gradePass then 1 else 0 end) as pass, 
     sum(case when st.averageMark < su.gradePass then 1 else 0 end) as fail 
from Study st join st.subject su 
where st.acaYear in (2009) and st.semester = 4 and su.idSeq = 1330 
group by st.acaYear 
+1

这是工作,情况不计数的支持,因此总结1数和金额0是无算。谢谢 – 2017-03-13 06:16:39

+0

玻璃它帮助。 – Nathanphan 2017-03-26 10:37:09

+0

感谢它帮助我.... – 2017-12-11 13:29:55

1

结合Nathanphan的答案,M. A. Khomeni的评论,

CASECOUNT()

支持所以我们需要使用SUM()代替COUNT()

例如:

COUNT(CASE WHEN st.averageMark < su.gradePass THEN 1 ELSE 0 END) 

应该写成

SUM(CASE WHEN st.averageMark < su.gradePass THEN 1 ELSE 0 END)