본문 바로가기

ORACLE

오라클 랜덤함수를 사용하여 랜덤으로 원하는 갯수만큼 추출하는 방법



간혹 업무를 요청하시거나 개발할 경우 무작위로 추출해달라고 하는 요청을 가끔 받습니다. C로 개발하기에는 왠지 손이 많이 가기 때문에 간단한 쿼리를 이용하여 무작위로 원하는 건수만큼 추출하는 방법을 공유하고자 합니다.


무작위 추출방법


SELECT *
  FROM ABCDE
WHERE AAA = '1'  -- 조건1
    AND BBB = 'A'  -- 조건2
ORDER BY DBMS_RANDOM.VALUE -- 랜덤함수


무작위 추출방법은 ORDER BY 절에 위와 같이 랜덤함수를 넣어주면 됩니다. 쿼리 속도는 서버에 따라 다른데 랜덤함수를 사용할때는 속도가 좀 느린편입니다.






원하는 갯수만큼 추출하는 방법


오라클은 MySql과 틀리게 ROWNUM 을 사용하여 추출해야 해요

위에 쿼리와 같다고 가정할때 바깥에 FROM으로 묶어주시고 ROWNUM을 사용하면 되는거죠.


SELECT *

   FROM (

SELECT *
  FROM ABCDE
WHERE AAA = '1'  -- 조건1
    AND BBB = 'A'  -- 조건2
ORDER BY DBMS_RANDOM.VALUE


WHERE ROWNUM <= 100 (무작위 100개 추출 쿼리의 예)






혹시 MySql을 사용하는 유저는 오라클에 DBMS_RANDOM.VALUE 대신 RAND()을 사용하시고 ROWNUM 대신 LIMIT 100 이런식으로 바꿔 사용하시면 됩니다. 아래 오라클 예 처럼 FROM절 안에 묶을 필요없습니다. 이럴땐 오라클 보다 편하네요.