笔记:做一个高中分班的东西。

一个年级有207个人,要把他们平均分到4个班里。每个班的人数要均匀,男女比利协调,学习能力层次均匀。

随机取数据以解决  例:select top 3 * from tb_userBook where userName='eyeqq' order by newid()

男女比利以解决
先取得男女生人数。然后把男人数/班数=每班男生人数,得到每班男生人数。例:把一批男生分到1班去。select top 每班男生 from

tb_class where sex='男'

每班的学习能力要相同:
设这班有41人。
先把数据库的记录条数取出,然后算出每个等级的人数。公式:取整(总人数/4)=每组人数
取第一个等级的人 select top 每组人数 * from tb_class order by DESC
取第二个等级的人 select top 每组人数 * from tb_class where not in (select top 每组人数 * from tb_class order by DESC)
....第三组...
....第四组...

实例:
select top 10 bookName,hot from tb_userBook ORDER by hot desc
select top 10 bookName,hot from tb_userBook where hot not in (select top 10 hot from tb_userBook ORDER by hot desc) order by

hot desc

这样子是能解决把学习能力不同的人分成四个等份的问题。但是这样做会有遗漏学生。
原因是因为第一种情况:我拿前面的例子来说,如果在第10名的学生和第11、12名的学生的分数是一样的。那么在第二个能力等级里是取不到

11、12名的数据的。第二种情况就是这个班有41个人,最后一名也是取不到的。

有朋友说学号是不一样的。再做一个断定的,把那个因为第一种情况漏了的数据找回来。换了种思路。找到了这种方法来解决。
例:(我用的以前的表,所以把url列当成是ID列来唯一标识一条记录)
select bookName,hot from tb_userBook ORDER by hot desc
select top 10 bookName,hot,url from tb_userBook ORDER by hot desc
select top 10 bookName,hot,url from tb_userBook where url not in (select top 10 url from tb_userBook ORDER by hot desc) order by hot desc
这样子就能得到我要的效果。
哈哈

遗漏最好一位学生的情况是电脑不可避免的,这里我看还是加个手动分班好些,反正以后也会有插班生或是换班的人。
OYZ搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值