쿼리를 실행할 때마다 임의의 순서로 테이블 행을 반환하는 SQL 쿼리를 작성할 수 있습니까? 그것이 가장 효율적인 아니지만임의의 순서로 행을 반환
SELECT quote FROM quotes ORDER BY RAND()
:
쿼리를 실행할 때마다 임의의 순서로 테이블 행을 반환하는 SQL 쿼리를 작성할 수 있습니까? 그것이 가장 효율적인 아니지만임의의 순서로 행을 반환
SELECT quote FROM quotes ORDER BY RAND()
:
SELECT * FROM table
ORDER BY NEWID()
이 가장 간단한 솔루션입니다. This one은 더 나은 솔루션입니다.
작동하지 않는 예쁜 확인합니다. ORDER BY 절의 RAND()는 한 번만 계산되므로 자연스러운 순서로 끝납니다. 그것을 테스트하려면 ORDER BY RAND(), 1을 시도하면 첫 번째 열 (적어도 SQL Server 2005 이상)에서 orderd의 목록을 얻을 수 있습니다. –
흠, 나는 이것이 과거에 나를 위해 일했다고 확신합니다. 아마 당신이 사용하는 제품에 달려있을 것입니다. –
그것은 MS SQL에서 작동하지 않는 것 같습니다. –
일반적인 방법은 고유 한 GUID를 생성하는 NEWID() 함수를 사용하는 것입니다. 따라서
SELECT * FROM dbo.Foo ORDER BY NEWID();
명백한 선택 인 RAND() 함수는 직접 작동하지 않지만 다음과 같은 임시 해결 방법이 있습니다. http://weblogs.sqlteam.com/jeffs/archive/2004/11/22/2927.aspx – devstuff
+1, 하지만 Dave Barker는 더 빨랐습니다 :) –
효율적이고 무작위 적으로 두 가지 다른 쿼리를 사용하는 것이 가장 좋습니다.
뭔가 같은 ... 테이블
그때부터
SELECT에서 table_id는 선택한 언어로, 다음, 임의의 ID를 선택 해당 행의 데이터를 당깁니다. 테이블에서
SELECT * WHERE 내 table_id = $ rand_id
하지만 그건 정말 당신이 테이블의 행을 많이 가지고 기대하는 경우 좋은 생각이 아니다. 무작위로 선택하는 것에 제한을 두는 것이 좋습니다. 간행물의 경우 작년 내에 게시 된 항목 만 무작위로 선택할 수 있습니다.
여기에 예 (source)입니다 :
SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint);
이 필요한 것입니다 :
SELECT *를 TABLE_NAME 순서와 RAND에 의해() LIMIT 1
질문에 SQL Server 태그가 지정되었습니다. RAND()가 작동하지 않고 LIMIT가 인식되지 않으며 결과가 하나의 레코드로 제한되도록 요청하지 않습니다. – LarsTech
MySQL의 경우'ORDER BY uuid()'를 사용하십시오. (... 나 같은 일반 검색을 통해이 페이지에 도착한 사람들에게!) –
이것은 작동하지만, (14M + 행)에서 선택하는 테이블에서 광란하게 느립니다. 기대 되는가? AFAIK, 테이블의 색인이 제대로 생성되었습니다. –
@ 존 - 1400 만 개의 레코드를 선택하고 고유 식별자로 생성하고 주문하는 중입니다. 아마 하나의 무작위 행 뒤에 있을까요? 이 경우 SELECT TOP 1 FROM table ORDER BY NEWID() –