2008-09-09 56 views
32

在存储过程中将SQL查询的结果排序为随机顺序的最佳方法是什么?SQL Server Random Sort

+2

可能重复的[如何在SQL中请求随机行?](http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql) – exhuma 2014-08-11 13:39:32

回答

55

这是SO# 19412的副本。下面是我给那里的答案:

select top 1 * from mytable order by newid() 

在SQL Server 2005及以上者,可以使用TABLESAMPLE得到这是重复的随机样本:

SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ; 
+0

虽然这不是根据其他问题链接到最好的答案:http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql – 2012-11-08 20:49:26

+0

这个问题是不是一个完全重复的SO#19412要求从查询中得到一个随机行,即使这被标记为答案,因为这只给出1行而不是查询的结果随机排序。 – 2015-09-11 17:09:57

14
select foo from Bar order by newid() 
4

正如您所知,您不能只按ORDER BY RAND(),因为它只会生成一个值。所以使用一个关键的种子值。

 
SELECT RAND(object_id), object_id, name 
    FROM sys.objects 
ORDER BY 1 
7

或者使用下面的查询,它返回一个更好随机抽样结果:

SELECT * FROM a_table WHERE 0.01 >= CAST(CHECKSUM(NEWID(), a_column) & 0x7fffffff AS float)/CAST (0x7fffffff AS int) 

0.01表示总行数的1%。从SQL 2008联机丛书

报价:

如果你真的想要的 各行的随机抽样,修改查询到 过滤掉行随机,而不是使用 TABLESAMPLE。