我正在使用oracle和hibernate进行映射.我想用count()函数中的条件计数.我的代码是:
选择计数(st.averageMark <su.gradePass然后1其他0结束时的情况)来自Study st join st.subject su,其中st.acaYear在(2009)和st.semester = 4,su.idSeq = 1330 group by st. acaYear
代码没有回报我.我使用sum而不是count它返回了一个结果,但它是错误的,结果比我想象的要大.
预先感谢.
Nat*_*han 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
Run Code Online (Sandbox Code Playgroud)
结合 Nathanphan的回答和MA Khomeni的评论,
CASE不支持COUNT()
所以我们需要使用SUM()代替COUNT()
例如:
COUNT(CASE WHEN st.averageMark < su.gradePass THEN 1 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)
应该写成
SUM(CASE WHEN st.averageMark < su.gradePass THEN 1 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5850 次 |
| 最近记录: |