集算器计算学生成绩在班级排名、学校排名和全局排名
现有学生成绩表,包含 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() / 关闭连接