注册 登录
编程论坛 SQL Server论坛

[求助]求一下随机取纪录的写法

suntao 发布于 2007-04-13 11:12, 1746 次点击

我想从数据库里随机取纪录,随机取好像
SELECT * from b order by newid()就行了,
但又要按字段a取,比如a的直的越大,他出现的几率就越高,有没有办法?
跪求高手指点,眼泪哗哗地~。。。

13 回复
#2
Kendy1234562007-04-13 12:05

对A加权 自己定义权值

自己写一个函数比如叫 PartPerc 先取得max(a)和min(a) 然后对max(a)-min(a)这个区域里面的值加权
比如 return (a - min(a)) / (max(a)-min(a) )

然后 取得一个随机数
然后 select top 10 * from b where dbo.PartPerc(a) > @random order by newid() 这样a的值越大 记录被取到的几率就越高


然后你再从这个结果集里面随机取吧
#3
suntao2007-04-13 12:32

虽然没看懂,先谢谢斑竹,加权是什么意思?在什么地方写函数?求斑竹指点,呵呵,这个事搞定了,斑竹来南京,我请吃饭,呵呵!!!

#4
棉花糖ONE2007-04-13 12:57

老大为什么要用随机数,还不如直接和一个比较大的数比,比如3/4什么的,随机数不容易控制啊,要是产生的随机数很小那函数不是白写了

#5
Kendy1234562007-04-13 14:06
棉花糖... 如果不是随机数 怎么体现 几率 这个概念?

我的方案意思是: 每次产生一个随机数 然后把权值大于这个随机数的记录随机抽取出来
这样不就是数越大 被取到的机会越大么? 如果和固定数比 那比这小的 就永远取不到了
其实就是概率论了.

楼主 加权不懂没关系 就是给每个字段分配一个 系数 这个系数可以看做是被抽取的概率.
在数据库里面写函数 在存储过程里面调用函数 或者直接在查询分析器下调用函数都可以
#6
suntao2007-04-13 14:11

斑竹方便留个qq吗?

#7
棉花糖ONE2007-04-13 14:32

老大的这个思想厉害,学习了

#8
Kendy1234562007-04-13 14:50
单位封q的
#9
suntao2007-04-15 08:17

斑竹,@random是什么?

#10
帅哥一条虫2007-04-15 13:27
定义的随机变量
#11
Kendy1234562007-04-16 16:24

应楼主要求给出代码:

---数据准备
create table b
(
SName varchar(10),
SText varchar(10),
SNum int
)

insert into b
select 'a','aa',1
union
select 'b','bb',2
union
select 'c','cc',3
union
select 'd','dd',4
union
select 'e','ee',5
union
select 'f','ff',6
union
select 'g','gg',7
union
select 'h','hh',8
union
select 'i','ii',9

---存储过程的代码

Create Proc pr_GetRandomRecords

as

Declare @Max money,@Min money,@Random float

select @Max = max(Snum),@Min = min(Snum) from b

select *,SFactor = (Snum - @min)/ (@max - @min) into #a from b
set @Random = rand()

Select * into #b from #a where Sfactor >= @random

Select top 1 *,[id] = newid() from #b order by newid()

Go


----运行存储过程得到的结果

exec pr_GetRandomRecords

结果:

(9 row(s) affected)


(2 row(s) affected)

SName SText SNum SFactor id
---------- ---------- ----------- --------------------- ------------------------------------
h hh 8 .8750 BC400AA3-C35C-436D-A427-4104E9BA2A92

(1 row(s) affected)


#12
suntao2007-04-16 17:12

斑竹,偶像!

#13
xiyou4192007-04-17 12:29
Kendy123456,真是太佩服你了~~~~~~~~~~~~~~~
#14
无聊的爱2007-04-24 18:00
I 服了 you!
1