SQL Server随机排序

SQL Server随机排序

SQL Server Random Sort

在存储过程中将sql查询的结果按随机顺序排序的最佳方法是什么?


这是SO#19412的副本。这是我在那给出的答案:

1
select top 1 * from mytable order by newid()

在SQL Server 2005及更高版本中,可以使用TABLESAMPLE获取可重复的随机样本:

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

1
select foo from Bar order by newid()

或使用以下查询,该查询返回更好的随机样本结果:

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

0.01表示约占总行数的1%。

SQL 2008联机丛书中的语录:

If you really want a random sample of
individual rows, modify your query to
filter out rows randomly, instead of
using TABLESAMPLE.


您不能只知道ORDER BY RAND(),因为它只会生成一个值。因此,请使用密钥作为种子值。

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

推荐阅读