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.
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
Combining Nathanphan's answer and M. A. Khomeni's comment,
CASE
is not supported inCOUNT()
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With