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.