2011-03-14 70 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)