SQL Server随机排序

时间:2020-03-05 18:50:22  来源:igfitidea点击:

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

解决方案

回答

select foo from Bar order by newid()

回答

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

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

回答

这是SO19412的副本。这是我在那给出的答案:

select top 1 * from mytable order by newid()

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

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

回答

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

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.