8

I am using oracle and hibernate for mapping. I want to count with a condition in count() function. my code is:

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

the code return me nothing. I used sum instead of count it returned a result but it is wrong, the result is bigger than I suppose it to be.

thank in advance.

AsfK
  • 3,328
  • 4
  • 36
  • 73
Nathanphan
  • 947
  • 2
  • 11
  • 23

2 Answers2

21

I just solved the problem with the following code.

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
Emdadul Sawon
  • 5,730
  • 3
  • 45
  • 48
Nathanphan
  • 947
  • 2
  • 11
  • 23
8

Combining Nathanphan's answer and M. A. Khomeni's comment,

CASE is not supported in COUNT()

So we need to use SUM() instead of COUNT()

For Example:

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

Should be written as

SUM(CASE WHEN st.averageMark < su.gradePass THEN 1 ELSE 0 END)
Community
  • 1
  • 1
Emdadul Sawon
  • 5,730
  • 3
  • 45
  • 48