2008-09-09 5 views
32

SQL 쿼리의 결과를 저장 프로 시저 내에서 임의의 순서로 정렬하는 가장 좋은 방법은 무엇입니까?SQL Server 임의 정렬

+2

[SQL에서 임의의 행을 요청하는 방법?] (http://stackoverflow.com/questions/19412/how-to-request-a-random-row-in-sql) – exhuma

답변

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 –

+0

이 질문의 정확한 복제되지 않습니다 # 19412는 쿼리에서 임의의 행을 요청합니다.이 행은 무작위로 정렬 된 쿼리의 결과가 아니라 1 행을 제공하기 때문에 대답으로 표시되어 있습니다. –

+0

TABLESAMPLE 팁은 금입니다! – Kong

14
select foo from Bar order by newid() 
4

아시다시피 RAND()는 단지 하나의 값만 생성하므로 사용자는 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을 사용하여 무작위로 필터 밖으로 행에 쿼리를 수정, 대신 .

+2

이것은 TABLESAMPLE보다 느리게 실행되며 큰 테이블에서 ORDER BY NEWID()보다 빠릅니다. – endo64

+0

harpo의 대답이 무작위로 결과를 정렬했지만 쿼리의 결과에서 무작위 샘플링을 찾고 있었기 때문에이 특정 솔루션을 통해 내가 원하는 것을 얻을 수있었습니다. –

관련 문제