日期:2014-05-20  浏览次数:20721 次

hibernate多表查询求相应的HQL语句
一个多表查询的问题
表分别为contest 字段 contest-id title remester score【(大于60的个数)和一共的个数】
contest-config 字段 contest-id type id(统计个数)这个表要根据type的不同计算出id的数目
contest-detail 字段 contest-id sutudent-id 
要输出sutudent-id(统计总共的个数) title type为0的id值/type为1的id值/type为2的id值 remester 大于60的score个数/总共score的个数
这东西怎么写HQL啊
我都快疯了

------解决方案--------------------
说的也不清楚,我看了都急死了
------解决方案--------------------
用hql不行的话,你也可以直接用原生态的sql去写,同样能达到你的效果
------解决方案--------------------
帮楼主顶顶,顺便接点分哦,谢谢啦
------解决方案--------------------
帮顶
------解决方案--------------------
HQL查不出来,直接用createSqlQuqry查吧,支持Sql
------解决方案--------------------
hql语句也支持聚合函数的。你这些需求都可以通过聚合函数解决。第一个用count 要求出>60的就加个where条件
第二个则是要用到分组group by type 统计
第三个当然也是用count
------解决方案--------------------
比如第2个。求出的结果形如
type sum
0 x
1 y
2 z
这个结果用hql语句查询出来返回的是个对象数组。取数据你会吧?
------解决方案--------------------
第一:你可以自己去创建一个类。下面的是我以前用到的。作为参考;
第二:可以使用视图,然后利用视图去查询。就是有一个缺点。只能查询。
Java code

import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

/**
 * 作者@:chen boning
 * 
 * @说明:自定义
 */
public class EhomeJoyDAO {
    JdbcTemplate jdbcTemplate;

    /**
     * 销售统计
     * 
     * @param enterpriselogname
     * @return
     */
    public List getbusinessbuy(String enterpriselogname, String date) {
        String sql = "select  t.goodsname,sum(t.sumprice) as sumprice  from ehome_vjoy t where t.enterpriselogname='"
            + enterpriselogname
            + "' and to_char(t.lasttime,'yyyy-MM-dd') like '2008-"
            + date+"-%'group by t.goodsname";
        List list = this.getJdbcTemplate().queryForList(sql);

        return list;
    }

    public JdbcTemplate getJdbcTemplate() {

        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

        this.jdbcTemplate = jdbcTemplate;
    }

    /**
     * 财务报表
     * 
     * @return
     */
    public List getbusinessreport(String enterpriselogname, String date) {
        String sql = "select  t.goodsname,sum(t.sumprice) as sumprice,t.enterprisename  from ehome_vjoy t where t.enterpriselogname='"
                + enterpriselogname
                + "' and to_char(t.lasttime,'yyyy-MM-dd') like '2008-"
                + date+"-%'group by t.goodsname,t.enterprisename";
        List list = this.getJdbcTemplate().queryForList(sql);
        return list;
    }

------解决方案--------------------
正在关注中,请稍候。。。。。
------解决方案--------------------
hql 是操作对象的,如果你这三个表没有关系,不能用union
用sql是正确的选择:
如果contest-id 是这三个表的主键,并且都是一一对应的:

表一有4个字段分别为contest-id title remester score 
表二有三个字段分别为contest-id type id 
表三有两个字段分别为contest-id sutudent-id 

select contest-id ,title ,sum(case或者decode函数(oracle专用)(score >= 60,1,0) )合格人数,count(score ) 总数,sum(case或者decode函数(oracle专用)(type = 0,1,0) )类型为0的数, 
sum(case或者decode函数(oracle专用)(type = 1,1,0) )类型为1的数,
sum(case或者decode函数(oracle专用)(type = 2,1,0) )类型为2的数

from 表1,表2,表三
where 表1.contest-id = 表2.contest-id = 表3.contest-id 
group by contest-id ,title