SQL Server随机排序

Mar*_*nnw 42 sql-server

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

Jon*_*way 69

这是SO#19412的副本.这是我给那里的答案:

select top 1 * from mytable order by newid()
Run Code Online (Sandbox Code Playgroud)

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

SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ;
Run Code Online (Sandbox Code Playgroud)

  • 事实上,这根本不能回答*如所问*的问题。由于提问者已将此标记为最佳答案,因此他似乎无法阐明他的实际问题,但这并不能改变提出的问题是“我如何随机排序**所有**的行”这一事实由我的查询返回”,而这个答案说“这是从表中返回单个随机行的方法”。 (3认同)
  • 这个问题不是 SO#19412 的完全重复,它要求查询中的随机行,即使这被标记为答案,因为这仅给出 1 行而不是随机排序的查询结果。 (2认同)

Jim*_*mmy 18

select foo from Bar order by newid()
Run Code Online (Sandbox Code Playgroud)


end*_*o64 8

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

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

0.01表示总行数的~1%.

引自SQL 2008联机丛书:

如果您确实需要单个行的随机样本,请修改查询以随机过滤行,而不是使用TABLESAMPLE.

  • 这比TABLESAMPLE慢,比大表上的ORDER BY NEWID()快. (2认同)