我正在使用oracle和hibernate进行映射。我想用count()函数中的条件计数。我的代码是:
选择计数(st.averageMark< su.gradePass然后1其他0结束时的情况) 来自Study st join st.subject su st.acaYear in(2009) 和st.semester = 4 和su.idSeq = 1330 st.acaYear小组
代码没有回报我。我用sum而不是count它返回了一个结果,但是它错了,结果比我想象的要大。
提前谢谢。
答案 0 :(得分:13)
我刚用以下代码解决了这个问题。
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)
结合Nathanphan的回答和M. A. Khomeni的评论,
CASE
不支持
COUNT()
因此,我们需要使用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)