SELECT * FROM Northwind..Orders ORDER BY RAND(); -- 錯誤!
RAND() 在單一查詢中**只計算一次**,所有列獲得相同隨機值,排序無效果。
-- 全表隨機排序
SELECT * FROM Northwind..Orders ORDER BY NEWID();
-- 隨機抽取 10 筆
SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID();
NEWID() 每列**獨立生成唯一識別碼 (GUID)**,天然隨機分佈ORDER BY NEWID() 需全表掃描 + 排序,**較慢**TABLESAMPLE (SQL 2005+) 粗略抽樣,再 ORDER BY NEWID() 精確取樣WHERE RAND(CHECKSUM(NEWID())) < 0.01 伯努利抽樣 (近似 1%)
-- 固定種子:利用 CHECKSUM + 固定值
SELECT * FROM Orders ORDER BY CHECKSUM(NEWID(), 12345); -- 每次結果相同
ORDER BY NEWID() 是 T-SQL 實現真隨機排序的標準慣用語。小表直用,大表配合抽樣技巧,滿足隨機抽樣、打亂順序等多樣需求。