2008-09-09 92 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。