首页 > 开发 > MySQL > 正文

10000个学生,根据快速的根据考分来计算每个学生的击败率?

2017-09-08 08:50:37  来源:网友分享

10000个学生,根据快速的根据考分来计算每个学生的击败率?
举个例子,10000个学生来考试,考完后提交得分,需要根据得分来计算学生的击败率(比如,我打败了90%的同学),每个学生提交答案的试卷不确定,有快,有慢。

我的疑问:每个学生提交答案后,所有学生的击败率都要重新计算,内存溢出了。

我现在的计算方式:按分数desc排序,循环每个学生,计算得分比这个学生多的人有多少。

我是一次取10000条记录呢,还是每次取100条数据,多循环几次?

解决方案

楼主这问题提的有点怪。击败率,无非就是分数比自己低的人,两条sql语句,一条交卷人数count,一条分数比自己低的人数count,两条sql语句不至于内存溢出吧!
像楼主那个样操作,每个人一提交,就更新之前所有提交的人的击败率,不内存溢出才有鬼。
如果楼主把这个击败率当成实时更新的字段。那只能用计划任务定时更新。
感觉没必要。一般来说数据列表都会分页,遍历的时候20条左右,就统计一次总人数,然后这20 count比他分数低的,花费不了多少时间。至于后期如果要数据导出,怕影响效率,写个脚本,直接把击败率一次性更新不就好了。