随机样本组

问题描述 投票:0回答:3

我有一个130万行的表。

我如何选择随机的100行?

我的表名是[March Value Mailer Offer Audience],表中的属性是individual_id

我只是想让它随机选择100行进行我正在运行的测试

sql sql-server
3个回答
2
投票

人们在这里建议的NEWID技术可能是性能挑战,因为1.3M行的每一行都将被分配一个NEWID,所有行都将被排序,只有那时你的前100名将被返回。

SQL Server提供了一种更有效的方式来对行进行采样,使用表提示TABLESAMPLE。例如,

select * from [March Value Mailer Offer Audience] TABLESAMPLE(100 ROWS);

查看更多信息here

HTH


1
投票

一种昂贵的方法是:

select top (100) t.*
from t
order by newid();

如果你想要任意行,你可以这样做:

select top (100) t.*
from t;

或者,一个方便的解决方案,既是随机的,也应该更快:

select top (100) t.*
from t
where rand(checksum(newid())) < 0.001   -- about 1 in 1000 rows
order by newid();

这将行减少到大约1300(0.1%)行的随机子集,然后在它们之间随机选择。


0
投票

使用newid()

select top (100) a.*
from [March Value Mailer Offer Audience] a
order by newid();

但是,只有top (n)会做你想要的,没有任何订购:

select top (100) a.*
from [March Value Mailer Offer Audience] a;
© www.soinside.com 2019 - 2024. All rights reserved.