中小学成绩统计常用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 '