【问题标题】:Hibernate, how to count with condition休眠,如何计算条件
【发布时间】:2011-07-14 19:35:00
【问题描述】:

我正在使用 oracle 和 hibernate 进行映射。我想用 count() 函数中的条件进行计数。我的代码是:

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

代码什么也没给我。我使用 sum 而不是 count 它返回了一个结果,但它是错误的,结果比我想象的要大。

提前致谢。

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    我刚刚用下面的代码解决了这个问题。

    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
    

    【讨论】:

    • 这是有效的,计数中不支持大小写,所以 sum 1 是计数而 sum 0 是不计数。谢谢
    • 玻璃有帮助。
    【解决方案2】:

    结合Nathanphan的回答和M. A. Khomeni的评论,

    COUNT() 不支持CASE

    所以我们需要使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2017-12-25
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多