Hover-Z 日记-排名

已知表
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,因为一条一条插比较慢。

持续更新。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值