首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么计算体育考试的及格率

2012-03-05 
如何计算体育考试的及格率现在有如下格式数据表:id|学号|成绩|考试次数|考试类型1|aaa|56|1|体育2|bbb|60|

如何计算体育考试的及格率
现在有如下格式数据表:
id     |   学号     |     成绩     |   考试次数   |   考试类型
1       |   aaa       |       56       |         1           |   体育
2       |   bbb       |       60       |         1           |   体育
3       |   ccc       |       58       |         1           |   体育
4       |   aaa       |       30       |         2           |   体育
5       |   bbb       |       69       |         2           |   体育
6       |   ccc       |       45       |         2           |   体育
7       |   aaa       |       29       |         3           |   体育
......................................


要生成如下表格

考试次数     |     类型     |     参加考试人数     |     合格率
    1               |     体育     |               3                 |       33.3%

[解决办法]
select 考试次数,考试类型,
count(*) as 参加考试人数,
cast(cast(100.0*sum(case when 成绩> =60 then 1 else 0 end)/count(*) as numeric(10,2)) as varchar(10))+ '% ' as 合格率
from 数据表
group by 考试次数,考试类型


[解决办法]
上面numeric(10,2)应该改为numeric(10,1)

以上会出三条记录
如果只要一条记录

select 考试次数,考试类型,
count(*) as 参加考试人数,
cast(cast(100.0*sum(case when 成绩> =60 then 1 else 0 end)/count(*) as numeric(10,1)) as varchar(10))+ '% ' as 合格率
from 数据表
where 考试次数=1 and 考试类型= '体育 '
group by 考试次数,考试类型

[解决办法]
--创建测试环境
create table t(id int,学号 varchar(10),成绩 numeric(5,2),考试次数 int,考试类型 varchar(10))

--插入测试数据
insert t(id,学号,成绩,考试次数,考试类型)
select '1 ', 'aaa ', '56 ', '1 ', '体育 ' union all
select '2 ', 'bbb ', '60 ', '1 ', '体育 ' union all
select '3 ', 'ccc ', '58 ', '1 ', '体育 ' union all
select '4 ', 'aaa ', '30 ', '2 ', '体育 ' union all
select '5 ', 'bbb ', '69 ', '2 ', '体育 ' union all
select '6 ', 'ccc ', '45 ', '2 ', '体育 ' union all
select '7 ', 'aaa ', '29 ', '3 ', '体育 '

--求解过程
select 考试次数,考试类型,count(1) as 参加考试人数
,convert(varchar(20),convert(numeric(18,2)
,sum(case when 成绩 > = 60 then 1 else 0 end)*100
/convert(numeric(18,2),count(1))))+ '% ' as 合格率
from t
group by 考试次数,考试类型



--删除测试环境
drop table t

/*--测试结果
考试次数 考试类型 参加考试人数 合格率
----------- ---------- ----------- ----------
1 体育 3 33.33%
2 体育 3 33.33%
3 体育 1 0.00%

(所影响的行数为 3 行)
*/
/*

热点排行