已知表
table 1
已有字段: id student_id score
1、数据表中已经存在数据,按成绩排序。
方案一:
1)使用 group by score,order by score desc 获取成绩列表(降序),count(*)获取各成绩对应的人数,保存在对象数组中 arr,结构为{score:100,num : 90},score为成绩,num为数量
2)设置一个变量初始值为 index = 1;
3)遍历 arr {update 对应分数的记录的排名 为 index,index + arr_item[num],arr_item 为 arr 的元素};
遍历完这个操作后,成绩排名也就完成了。
2、数据表中存在数据,但数据随时都会发生变化,实时监测变化中的排名。
方案一:
1)当数据发生改变时,计算改当前分数在数据库的排名,count(*) score > sc;
2)修改该数据的排名;
3)修改 score < sc, 排名加一;
这种方案有个问题,就是并发的情况,需要用上数据库的并发控制。
不过最好在业务逻辑上做控制。
3、将数据库存在的数据,通过计算排名插入到另一个表;
方案一:
1)将数据按照分数,加入到对应的队列中;
2)group by 获取分数(降序)和人数;
3)遍历,计算排名,拼接 insert sql;
4)拼接完 sql,执行 sql。
为什么拼接 sql,因为一条一条插比较慢。
持续更新。。。