一个年级有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搞定!