Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server快速随机抽样_Sql Server - Fatal编程技术网

Sql server SQL Server快速随机抽样

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

我一直在寻找从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,我遇到了如下错误:

“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,我明白了!非常感谢!