求最优化的SQL语句或良好算法(200分)
我的实现是这样的,觉的算法不好,所以,征求大家的意见,多多关照:
程序(C/S结构多客户端)
(注意:统计的课程是不定的)
报表格式:
班级 课程代码/课程名称 及格率 优秀率 平均分
按班级统计各科成绩平均分:select avg(cj) as pjf from b_xscjb where kcdm='00' and
bjdm in('200106','200102') group by kcdm,bjdm
统计优秀人数,及格人数统计
1。 select count(*) as rx,bjdm,kcdm from b_xscjb where cj>=90 and kcdm in
('00','01') and bjdm in('200106','200102') group by bjdm,kcdm
2。 select count(*) as rx,bjdm,kcdm from b_xscjb where cj>=60 and kcdm in
('00','01') and bjdm in('200106','200102') group by bjdm,kcdm
各科参加考试人数统计
select count(*) as ksrx,bjdm,kcdm from b_xscjb where kcdm in ('00','01') group by
bjdm,kcdm
统计优秀率(单科)
优秀人数/总人数
统计及格率(单科)
及格总人数/考试总人数
多层循环实现最终报表统计(借助本地ACCESS数据库表做为临时打印库)
报表格式:
班级 课程代码/课程名称 及格率 优秀率 平均分
给个好的建议,或更好的SQL语句
问题点数:100、回复次数:7Top
1 楼hmily1688(没什么好说的)回复于 2002-10-12 11:23:13 得分 0
建议你做成存储过程,不然速度???Top
2 楼MarGo(潇洒)回复于 2002-10-12 11:25:07 得分 0
我也想做成存储过成,但考率到了并发问题以及参数太过于多,才出此下策Top
3 楼MarGo(潇洒)回复于 2002-10-12 11:27:15 得分 0
而且参数个数也是不定的Top
4 楼MarGo(潇洒)回复于 2002-10-12 11:28:50 得分 0
最终我还要返回一个记录集,这样的存储过程如何编呢Top
5 楼j9988(j9988)回复于 2002-10-12 12:34:08 得分 100
SQLSERVER2000:
select
bjdm as 班级,
kcdm as 科目,
avg(cj) as 平均分,
1.0*sum(case when cj>=90 then 1 else 0 end)/count(*) as 优秀率,
1.0*sum(case when cj>=60 then 1 else 0 end)/count(*) as 优秀率
from b_xscjb where kcdm in ('00','01')
and bjdm in('200106','200102')
group by bjdm,kcdmTop
6 楼j9988(j9988)回复于 2002-10-12 12:37:24 得分 0
ACCESS 没试过,应可以用IIF代替CASE语句,也可以一句完成,不需要用过程Top
7 楼MarGo(潇洒)回复于 2002-10-12 12:45:19 得分 0
高手!!!Top




