Sql server SQL Server快速随机抽样
我一直在寻找从sql表进行快速采样的方法,我发现这篇文章非常有用: 查询如下所示:Sql server SQL Server快速随机抽样,sql-server,Sql Server,我一直在寻找从sql表进行快速采样的方法,我发现这篇文章非常有用: 查询如下所示: select * from users where id in (select round(random() * 21e6)::integer as id from generate_series(1, 110) group by id -- Discard duplicates ) limit 100 但是,对于SQL Server
select *
from users
where id in (select round(random() * 21e6)::integer as id
from generate_series(1, 110)
group by id -- Discard duplicates
)
limit 100
但是,对于SQL Server,我遇到了如下错误:
“random”不是可识别的内置函数名
我们是否有这种快速采样方法的SQL Server计数器部分?谢谢
我尝试编辑为:
select top 100 * from users
where id in (
select round(RAND() * 21e6) CAST integer as id
from generate_series(1, 110)
group by id -- Discard duplicates
)
仍有错误:
The round function requires 2 to 3 arguments.
对于T-SQL,它是随机的,而不是随机的
此外,除了关于必须使用TOPn而不是limit的注释之外,还必须使用CAST或CONVERT进行数据类型转换。而generate_series不是sql server中的内置函数。来自Sean的评论:TABLESAMPLE。将是解决方案,现在采样速度非常快。另外:limit在T-SQL中不是受支持的关键字-您需要使用SELECT TOPn*而不是使用top 100 order bynewid@SeanLange,对于一些非常大的桌子,由newid订购,需要3个小时……这些桌子有多大?我只是在一个有1亿行的表上做了一个快速测试,并在不到3秒内返回了这些行。我想您不需要精确的100行,您可以查看TABLESAMPLE。@SeanLange,TABLESAMPLE解决了我的问题!!这个表可能有数万亿的规模。在这个查询中还有很多其他东西在t-sql中不起作用。很高兴这对你有用。需要注意的是,TABLESAMPLE并不总是返回100行或任何行。@SeanLange,谢谢!我意识到TABLESAMPLE实际上会返回随机页面,就像随机数据块一样。它是否可能更随机,比如大小为1的随机页面?目前它看起来像是在返回大小为100的随机页面,或者是我所不知道的大小为100的块。它是如何工作的,从女士。这肯定是有点奇怪,但使这种类型的事情相当快。@SeanLange,我明白了!非常感谢!