2008-09-09 44 views
32

Cách tốt nhất để sắp xếp kết quả của truy vấn sql thành một thứ tự ngẫu nhiên trong một thủ tục được lưu trữ là gì?Phân loại ngẫu nhiên SQL Server

+2

bản sao có thể có của [Cách yêu cầu hàng ngẫu nhiên trong SQL?] (Http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql) – exhuma

Trả lời

55

Đây là bản sao của SO# 19412. Dưới đây là câu trả lời tôi đã có:

select top 1 * from mytable order by newid() 

Trong SQL Server 2005 trở lên, bạn có thể sử dụng TABLESAMPLE để có được một mẫu ngẫu nhiên đó là lặp lại:

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

Mặc dù đây không phải là câu trả lời hay nhất theo câu hỏi khác liên quan đến: http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql –

+0

Câu hỏi này không phải là một bản sao chính xác của SO # 19412 yêu cầu một hàng ngẫu nhiên từ một truy vấn, mặc dù điều này được đánh dấu là câu trả lời, vì điều này chỉ cho phép 1 hàng không phải là kết quả của truy vấn được sắp xếp ngẫu nhiên. –

+0

Mẹo TABLESAMPLE là vàng! – Kong

14
select foo from Bar order by newid() 
4

Bạn không thể chỉ ORDER THEO RAND(), như bạn biết, bởi vì nó sẽ chỉ tạo ra một giá trị. Vì vậy, hãy sử dụng khóa cho giá trị hạt giống.

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

Hoặc sử dụng các truy vấn sau đây, mà trả về một tốt hơn kết quả mẫu ngẫu nhiên:

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

0,01 có nghĩa là ~ 1% tổng số hàng.

Trích từ SQL 2008 Books Online:

Nếu bạn thực sự muốn có một mẫu ngẫu nhiên của hàng cá nhân, sửa đổi truy vấn của bạn để lọc ra các hàng một cách ngẫu nhiên, thay vì sử dụng TABLESAMPLE.

+2

Điều này chạy chậm hơn TABLESAMPLE và nhanh hơn ORDER BY NEWID() trên một bảng lớn. – endo64

+0

Vì tôi đang tìm kiếm một mẫu ngẫu nhiên từ các kết quả của một truy vấn, giải pháp cụ thể này đã cho tôi những gì tôi đang tìm kiếm mặc dù câu trả lời của harpo sẽ ra lệnh cho các kết quả ngẫu nhiên. –

Các vấn đề liên quan