表:ballotInfo
字段:id(bigint),teamName(varchar(50)),phone(varchar(20))SQL语句:
select teamName,count(teamName),
count(teamName)/(select count(*) from ballotinfo)
 from ballotInfo b group by teamName要怎么转换成HQL语句呢?
String hql="select b.teamName,count(b.teamName)"+
",500*count(b.teamName)"+
",(select count(t2) from BallotInfo t2)"+
",500*count(b.teamName)/(select count(t3) from BallotInfo t3)"+ //加了这一句,立马报错,其它地方没有问题
" from BallotInfo b group by b.teamName order by count(b.teamName)";小弟实在是没有分了, 先行谢过!

解决方案 »

  1.   

    不要把 SQL 与 HQL 混为一谈!所有的 HQL 都能转换成 SQL,但是绝大多数的 SQL 是无法转换成为 HQL 的。
      

  2.   

    并不要拘泥于什么事情都采用 HQL 解决,能用 SQL 解决的话就用 SQL,没有必要再转成 HQL!况且 ORM 工具并不是只有 Hibernate!
      

  3.   

    老大,我只会Hibernate这个玩意, 人家又是考试题.
    不过,如雷贯耳!以前老师也没有说过不行, 一直以为:hql在功能上与sql媲美.
    看看你胸花,小弟就信你了!
      

  4.   

    引发了另一个问题:
    public List countInfo() {
    return (List)super.getHibernateTemplate().executeFind(new HibernateCallback() {
    public List doInHibernate(Session session) throws HibernateException,
    SQLException {
    //定义一个最终返回的集合
    List<Result> resultList=new ArrayList<Result>();
    //得到每一个国家的投票数
    String sql="select teamName,count(teamName),"+
    "500*count(teamName)/(select count(*) from ballotinfo) "+
    "from ballotInfo b group by teamName";
    Query query2=session.createSQLQuery(sql);
    List list2=query2.list();
    //把原来的结果,转到List<Result>这个专门的集合中去
    Iterator it=list2.iterator();
    while (it.hasNext()) {
    Object[] arr=(Object[])it.next();
    System.out.println("元素个数:"+arr.length);
    Result result=new Result();
    result.setName(arr[0].toString());
    result.setNum((Integer)arr[1]);
    result.setWidth((Integer)arr[2]);
    System.out.print(result.getName()+"\t");
    System.out.print(result.getNum()+"\t");
    System.out.println(result.getWidth());
    System.out.println("--------------------");
    resultList.add(result);
    }
    return resultList;
    }
    });
    }在我这段程序执行之后的结果居然是这样的:
    元素个数:3
    德国 22 22
    --------------------
    元素个数:3
    荷兰 11 11
    --------------------
    元素个数:3
    乌拉圭 20 20
    --------------------
    元素个数:3
    西班牙 14 14
    --------------------
    按道理应该不同啊, 怎么可能第二个值和第三个值一模一样呢?????