제가 필요해서 이 페이지를 보다가
다음과 같은 쿼리이면, 재익님의 그 제한(전재조건)이 없어도 될 듯싶습니다.
문제는 row 수가 많다면, 시간이 꽤 걸릴 것같군요.
select ceil(random() * (select count(*) from table_name)) as rowid,*
from table_name order by rowid limit 1;
limit 1은 한개의 row만.
>>정재익 님께서 쓰시길<<
:: order by rand(); 라는 구문은 mysql 에서 해당 테이블에서 랜덤한 순서대로 정보를 나열해서 가져 오
:: 는 것입니다. 어느 특정 row 를 random 하게 추출하고자 할때 유용하게 사용될 수 있지요.
::
:: 동관님의 질문을 받고 한번 고민을 해 봤습니다.
:: 지금까지의 결론은 있을 것은 같은데 그렇게 쉽지는 않다는 것입니다.
::
:: 다음과 같은 가정이 성립한다고 생각하고, 한가지 해법을 제시해 보겠습니다.
::
:: 1. _rowid 라는 특정한 필드가 있으며 이것은 1 부터 시작해서 계속 serial 로 증가하는 타입이다. (se
:: rial 이라는 자료형으로 선언되어 있다면 편리하겠지요)
:: 2. _rowid 값은 serial 임을 보장하며, 중간에 빠지는 값이 없다.
:: 3. 이 경우 특정 _rowid 값을 가지는 row 를 임의로 추출하고자 한다.
::
:: select * from table_name where
:: (_rowid=ceil(random()*(select max(_rowid) from table_name)));
::
:: >>김동관 님께서 쓰시길<<
::
:: :: 안녕하세요?
:: ::
:: :: mysql을 사용할때 임의의 데이타를 랜덤하게 불러 읽어들이기 위해서 select문에 order by rand()
:: 를
:: :: 사용했었는데 아주 유용하더군요.
:: ::
:: :: 그런데 postgresql에서도 임의의 row를 랜덤 추출하기 위해서 이것과 같은 효과를 얻는 쿼리방법을
:: 알
:: :: 고 싶습니다.
:: ::
:: :: 미리 답변에 감사드리겠습니다.
:: ::
:: :: 좋은 하루 되세요.
:: ::
:: :: ^^
|