hql语句如下
select sum(s.article) as 文章,c.name as 班级 from student s join student.classes c group by c.id
这样会将每个班级的文章数量合列出来.
文章      班级
 10         c1
 20         c2
 30         c3
现在我想要的是文章数量的总和,即想求得10+20+30=60这个总数.
如果是sql的话倒可以用子查询解决,但是hql不能
请问这个hql应该怎么样改.
感觉这种需求很普遍,hql应该能支持.

解决方案 »

  1.   

    你想求60 就不要group by了 直接sum呗
      

  2.   

    一条sql搞不出来的。
    你倒是可以在DAO上想想办法。
    比如,定义一个getSum的方法,在此方法中根据三个属性值求和,再返回。
      

  3.   

    如果不group by,直接sum.求得的值会大于真实值.
    因为每行是按照学生来列的,此时sum(s.article)会出现一个班级计算多次的情况
      

  4.   

    你的意思是把所有结果集取出来,在程序里求和是吗?
    这是报表里的一个需求,报表分页显示,每一列有一个总计值.
    现在的数据量挺大的,如果一次取出这么多数据放入一个List再遍历求和,页面加载时间太长了
      

  5.   

    你就将这里查出来的数据做为一个表,再从这个表里再sum一个不就有了
    select sum(art) as 文章 from (select sum(s.article) art,c.name name from student s join student.classes c group by c.id) 自定义表名
      

  6.   

    hql不支持from里的子查询..
    没其他办法了吗
      

  7.   

    不要一直纠结在 HQL 上,如果 HQL 无法实现,难道我们就不能用数据库的原生 SQL 语句了?
      

  8.   


    主要是查询条件已经用HQL写好公共的了.
    吸取教训了,报表之类复杂的需求还是不要用hql比较好
      

  9.   

    报表也不会这么弱智吧,对于某个item,应该会让你选择从数据库取得,还是根据某些数据项来加工吧?
    你想一句SQL搞出来,那好像真是不太可能。
      

  10.   


    报表中那些复杂的 SQL 语句,HQL 根本就没有这种能力做到。