sql - 从 SQL Server 表中随机选择 n 行

标签 sql sql-server random

我有一个 SQL Server 表,其中包含大约 50,000 行。我想随机选择其中大约 5,000 行。我想到了一种复杂的方法,创建一个带有“随机数”列的临时表,将我的表复制到其中,循环遍历临时表并使用 RAND() 更新每一行,然后从该表中选择随机数列 < 0.1 的位置。我正在寻找一种更简单的方法来做到这一点,如果可能的话,在一个语句中。

This article建议使用NEWID()函数。这看起来很有希望,但我不知道如何可靠地选择一定百分比的行。

以前有人这样做过吗?有什么想法吗?

最佳答案

select top 10 percent * from [yourtable] order by newid()

针对有关大表的“纯粹垃圾”评论:您可以这样做以提高性能。

select  * from [yourtable] where [yourPk] in 
(select top 10 percent [yourPk] from [yourtable] order by newid())

其成本将是值的键扫描加上连接成本,这在具有较小百分比选择的大型表上应该是合理的。

关于sql - 从 SQL Server 表中随机选择 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848872/

相关文章:

SQL 单列拆分为多列

Mysql 查询检查两列之间的单个日期时间值

sql - 如何从sql server中给定邮政编码和给定半径(以英里为单位)附近的表中获取所有其他邮政编码或(纬度和经度)?

Haskell Random Generator...如何让使用更方便?

sql - T-SQL 中的指数微分

php - 从数据库PHP计算大数据

sql-server - SQL Server 的数据库优化顾问是否会修改数据?

java - BinaryData 无法转换为 java.lang.Integer

batch-file - 在事件目录/本地系统中创建随机用户的批处理脚本

c++ - 错误: ISO C forbids comparison between pointer and integer