求一个对SQL查询结果进行随机取一条记录的语句。(50分)

  • 主题发起人 主题发起人 yzj_888
  • 开始时间 开始时间
Y

yzj_888

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库ACCESS。
ID(自动编号) 姓名 性别 年龄 分数
1 张山 男 20 81
2 李四 女 20 82
......
我想随机查出三条年龄为20的人的记录,不能重复,语句应该怎么写?
 
又看到这样的。access随机数每次会重复的。
select * from 表1 where 年龄=20 order by rnd(id)
 
先正常取出数据集 然后
Randomize;
ADOQuery.RecNO := Random(ADOQuery.RecodCount - 1) +1;
 
有什么办法能解决重复的问题吗?
比如一取三条年龄为20的,能闭勉重复问题吗?
 
我曾经和别人讨论过一个方案,源代码没有了,你自己写。
思路是这样的,使用一个数组保存用户id ,然后随机生成数组的序号,实际上这样就可以对应用户id,然后你再到数据库取用户数据,这样可以避免重复。
 
可能没有理解楼主的意思:既然是随机,你就应该允许重复啊。否则就不是随机了。

只要保证取出来的时候是使用的随机数即可。而且三个ID号当然不能重复。

这里面要注意一下,做到真正的随机:
1.如果完全分配所有的组合,则结果是 C(3, n) = n*(n-1)*(n-2)/ (1*2*3)
2.根据这个结果,如果你一个一个的取,则,显然可能出现重复(是排列不是组合)。如果取的时候,判断了重复,其实会偏差随机结果的。不过对于你的应用来讲,应该够了。
 
后退
顶部