柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

中小学成绩统计常用mysql查询语句

2019-11-14 admin mysql  1922


主要功能:

1、查询学生的历次考试成绩,并显示名次变化曲线图;

2、自动统计平均分、及格率、良好率、优秀率、最高分、最低分、最优生、学困生;

3、成绩统计表显示全年级各班三率一分排名,还可以统计各班前N名的三率一分;

4、显示总分及各科的分段统计、各班成绩单、成绩条、学生成绩变化表等各种分析统计表;

5、以上各种表格均可以生成设置好一定打印格式的Excel表格,下载后稍作设置后可直接打印。

成绩统计上传说明:

1、Excel文件必须有姓名、科目、班级的标题行,如果由于数据格式问题无法上传数据,请另存文件再试;

2、高中的年级如分文理,请将文理学生放在一张表上,并添加类别项,注明学生的文理类别;

3、程序将自动忽略“名次”、“总分”列,重新计算总分,经计算后总分为零或无班级的数据也自动忽略;

4、暂不支持Excel2007及2010格式(xlsx),请另存为Excel2003格式。

用户上传excel考生成绩,通过php读取写入数据库。数据表设计:

成绩统计sql语句:

//平均分
$avg=mysql_fetch_array(mysql_query("select avg(".$subject[$k].") from $table $tmp1"));
$tableall[$claname[$i]][$subject[$k]][]=number_format($avg[0],2);
//及格率、优秀率
$count0=mysql_fetch_array(mysql_query("select count(".$subject[$k].") from $table $tmp1"));
$count1=mysql_fetch_array(mysql_query("select count(".$subject[$k].") from $table where ".$subject[$k].">=".($score[$k]*0.6).$tmp2));
//$tableall[$claname[$i]][$subject[$k]][]=$count1['0']/$count0['0'];
$tableall[$claname[$i]][$subject[$k]][]=round($count1['0']/$count0['0']*100,2).'%';
$count2=mysql_fetch_array(mysql_query("select count(".$subject[$k].") from $table where ".$subject[$k].">=".($score[$k]*0.85).$tmp2));
//$tableall[$claname[$i]][$subject[$k]][]=$count2['0']/$count0['0'];
$tableall[$claname[$i]][$subject[$k]][]=round($count2['0']/$count0['0']*100,2).'%';
$elseban=3;
if ($info) {
//最高分、最优生
$max=mysql_fetch_array(mysql_query("select max(".$subject[$k].") from $table $tmp1"));
$tableall[$claname[$i]][$subject[$k]][]=$max['0'];
$rs=mysql_query("select 姓名 from $table where ".$subject[$k]."=".$max['0'].$tmp2);
$stunum=mysql_num_rows($rs);
$stuname='';
$m=1;
while($data=mysql_fetch_array($rs)){
$stuname.=$data['姓名'];
if ($stunum>1 && $m<$stunum) $stuname.='/';
$m=$m+1;
}
$tableall[$claname[$i]][$subject[$k]][]=$stuname;
//最低分、学困生
$min=mysql_fetch_array(mysql_query("select min(".$subject[$k].") from $table where ".$subject[$k]."<>0".$tmp2));
$tableall[$claname[$i]][$subject[$k]][]=$min['0'];
$rs=mysql_query("select 姓名 from $table where ".$subject[$k]."=".$min['0']." and ".$subject[$k]."<>0".$tmp2);
$stunum=mysql_num_rows($rs);
$stuname='';
$m=1;
while($data=mysql_fetch_array($rs)){
$stuname.=$data['姓名'];
if ($stunum>1 && $m<$stunum) $stuname.='/';
$m=$m+1;
}
$tableall[$claname[$i]][$subject[$k]][]=$stuname;
$elseban=7;
}

第一次上传成绩没有排位变化

第二次开始有班变和年变

实现方法是cj_data表的上次字段,关联数据表

首页代码:

if ($action=='table' && $id) {
$rs=mysql_query("select * from cj_data where id='$id'");
$data=mysql_fetch_array($rs);
$table=$data['数据'];
$graname=$data['年级'];
$tesname=$data['考试'];
$thistest=tablename($id,'成绩分析表');
if (!$data) {echo "";exit();}
echo '


文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!