集算器计算学生成绩在班级排名、学校排名和全局排名

 

现有学生成绩表,包含 ID,CName(姓名),SchoolID(学校),ClassName(班级),Score(成绩),ClassOrder(班级排名),SchoolOrder(学校排名),UnionOrder(总排名)。现在需要根据已有成绩计算三类排名。并将排名更新入库。
想到集算器实现方式:
=connect@e(“mysql”)        / 建立连接               
=A1.query(“select ID,CName,SchoolID,ClassName,Score  from s_sestudent order by ID”)                       
=A2.derive(ClassOrder,SchoolOrder,UnionOrder)        / 添加 3 个排名字段               
=A3.ranks@z(Score)        / 计算总排名               

A3.run(UnionOrder=A4(#))        / 排名回写序表               
=A3.group(SchoolID)                       
for A6        =A7.ranks@z (Score)        /计算学校排名       
        >A7.run(SchoolOrder=B7(#))               
        =A7.group(ClassName)               
        for B9        =B10.ranks@z (Score)        /计算班级排名
                >B10.run(ClassOrder=C10(#))       
/=A1.update@k (A3,s_sestudent)        /update数据库表               
=A1.error@m ()        /是否有错误               
=if(A13==null,A1.commit().A1.rollback())        / 如无错误提交,否则回滚               
A1.close()        / 关闭连接
又写了一种方式,比前一种代码量缩减到 9 行。
=connect@e(“mysql”)        / 建立连接               
=A1.query(“select ID,CName,SchoolID,ClassName,Score  from s_sestudent order by ID”).derive(ClassOrder,SchoolOrder,UnionOrder)        / 查询成绩表,并添加 3 个排名字段               
A2.run(UnionOrder=A2.rank@z(.Score,Score))        / 计算总排名               
for A2.group(SchoolID)        >A4.run(SchoolOrder=A4.rank@z(
.Score,Score))        / 计算学校排名       
        for A4.group(ClassName)        >B5.run(ClassOrder=B5.rank@z (~.Score,Score))        /计算班级排名
=A1.update@k (A2,s_sestudent)        /update数据库表               
=A1.error@m ()        /是否有错误               
=if(A7==null,A1.commit().A1.rollback())        / 如无错误提交,否则回滚               
A1.close()        / 关闭连接