我有一个SQL Server表,其中大约有50000行.我想随机 Select 大约5000行.我想到了一种复杂的方法,创建一个带有"随机数"列的临时表,将我的表复制到该临时表中,在临时表中循环,并用RAND()更新每一行,然后从该表中 Select 随机数列<0.1. 我正在寻找一种更简单的方法,如果可能的话,可以用一句话.

This article建议使用NEWID()功能.这看起来很有希望,但我看不出如何可靠地 Select 一定百分比的行.

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

推荐答案

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

对于有关大型表的"纯垃圾" comments ,您可以这样做以提高性能.

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

这样做的成本将是值的键扫描加上连接成本,在一个 Select 百分比很小的大型表上,这应该是合理的.

Sql相关问答推荐

调用存储过程时SQL服务器TDS协议响应问题

如何在VB.NET中使用MS SYS根据开始和结束期间日期进行查询

PG SQL中按条件聚合值

用相同值更新行

BigQuery`喜欢ANY‘和`不喜欢ANY’

Postgres:对包含数字的字符串列表进行排序

使用占位符向SQL INSERT查询添加 case

查找表中特定值的上次更新日期

如何计算给定日期前三个月的值以及月初数据?

Postgres SQL查询从字符串中获取邮箱地址

SQL查询正在工作,但返回空结果

如何在 SNOSQL 中执行反连接(或 where 子句过滤)以查找字段不包含另一个表中的值的行?

如何在android房间中进行多个加入

Postgresql:在链接表中判断相关表中插入值的条件

Clickhouse:左连接表到外部数组

基于变量的条件 WHERE 子句

比使用NOT EXISTS更高效的SQL删除方法是什么?

为 sqlite 全文搜索 (fts) 创建触发器时出现虚拟表的不安全使用

使用日期和间隔作为键加入 Athena 上的表?

如果 SQL 中不存在数据,如何根据某个 ID 为所有日期添加前一行