一个多表查询的问题
表分别为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啊
我都快疯了
表分别为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啊
我都快疯了
有三个表:1,contest 2,contest-detail 3,contest-detail
表一有4个字段分别为contest-id title remester score
表二有三个字段分别为contest-id type id
表三有两个字段分别为contest-id sutudent-id
现在要输出1、sutudent-id字段的个数也就是聚集函数count(sutudent-id),
2、title的值,
3、id的个数聚集函数count(id)(要求当type属性为0时,1时,2时){这么个格式id(type=1)/id(type(2)/id(type(0)},
4、remester的值
5、score的个数聚集函数count(score)
我也想了半天了
这么个逻辑SQL对我也是个不小的考验
不管是SQL还HQL只要能实现就行
第二个则是要用到分组group by type 统计
第三个当然也是用count
type sum
0 x
1 y
2 z
这个结果用hql语句查询出来返回的是个对象数组。取数据你会吧?
第二:可以使用视图,然后利用视图去查询。就是有一个缺点。只能查询。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;
}
欢迎深圳的JAVA程序员加入,共同探讨技术与工作、项目合作、共享信息、结交朋友
加入请输入验证信息:SZJP
用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
如果要加remester,就在select 和 group后加入。
上面只是一个思路,case或者decode函数的用法是不正确的,只供楼主参考,供大家讨论。
contest为考试安排
contest_config为考试审核
contest_detail为学生试卷
欢迎深圳的JAVA程序员加入,共同探讨技术与工作、项目合作、共享信息、结交朋友
加入请输入验证信息:SZJP
where q.subject.subjectid = s.subjectid and q.grade.gradeid = g.gradeid " +
"and u.userid = q.users.userid and g.gradeid=:gid and s.subjectid=:sid";
我也要解决这问题,要用hql``StringBuffer hql=new StringBuffer();
hql.append(" select new Map( ");
hql.append(" count(*) as totalNumber ");
hql.append(" ,sum(productQty) as totalProductQty ");
hql.append(" ,sum(productWeight) as totalProductWeight ");
hql.append(" ,sum(productVolume) as totalProductVolume ");
hql.append(" ,sum(productValue) as totalProductValue ");
hql.append(" ,sum(incomeCarry) as totalIncomCarry ");
hql.append(" ) ");
hql.append(" from WayBill ");
hql.append(" where valid='1' ");
hql.append(" group by empl.empId ");
hql.append(" order by empl.empId ");
System.out.println(hql.toString());
Query query=session.createQuery(hql.toString());
List<Map> list=query.list();
for(int i=0;i<list.size();i++){
Map m=list.get(i);
System.out.println("--票数:"+m.get("totalNumber")
+"--总件数:"+m.get("totalProductQty")
+"--总重量:"+m.get("totalProductWeight")
+"--总体积:"+m.get("totalProductVolume")
+"--总价值:"+m.get("totalProductValue")
+"--总收入:"+m.get("totalIncomCarry")
);
}//运行结果:
--票数:2--总件数:20--总重量:200--总体积:2000--总价值:1000--总收入:800
--票数:1--总件数:10--总重量:100--总体积:1000--总价值:500--总收入:400现在还差个业务员,高手来解决啊··