我有一个130万行的表。
我如何选择随机的100行?
我的表名是[March Value Mailer Offer Audience],表中的属性是individual_id
我只是想让它随机选择100行进行我正在运行的测试
人们在这里建议的NEWID技术可能是性能挑战,因为1.3M行的每一行都将被分配一个NEWID,所有行都将被排序,只有那时你的前100名将被返回。
SQL Server提供了一种更有效的方式来对行进行采样,使用表提示TABLESAMPLE。例如,
select * from [March Value Mailer Offer Audience] TABLESAMPLE(100 ROWS);
查看更多信息here
HTH
一种昂贵的方法是:
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%)行的随机子集,然后在它们之间随机选择。
使用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;