티스토리 뷰

Oracle/Oracle-SQL

랜덤으로 row를 추출하기

니플하임_ 2007.03.21 17:21
60개의 로우를 갖는 한 테이블에서 랜덤으로 로우를 추출하는 방법을 알아보자
1000byte 의 로우사이즈를 갖는
10만개 이상의 로우 테이블에서는 퍼포먼스가 많이 떨어지니 주의하자

select * from
(select x.*, rownum rn from cnt_report x ) a,
(select trunc(DBMS_RANDOM.value(1,60)) rn from dual) b
where a.rn = b.rn

위 쿼리는 랜덤으로 cnt_report table에서 로우를 추출하는 방법이다.
cnt_report는 단 60개의 로우만을 갖고 있으므로
cnt_report 테이블의 rownum을 뽑아서 뷰로 만들고 활용하였다.
(허나, key값이 number 타입으로 sequencial 하거나, 어떠한 규칙을 갖고 있다면
key를 변형하여 매칭시키는 방법을 생각하는 편이 좋다)

dbms_random.value(snum, enum) function은
snum으로부터  enum 사이의 수를 리턴하는 함수이나
정수형으로 떨어지지 않으므로- trunc() 함수로 정수화 하였다

위 쿼리는 특정상황에 적용하기 위해 활용되었으므로
다양하게 활용할 수 있겠다는 생각이다 ^^ 
댓글
댓글쓰기 폼