간혹 업무를 요청하시거나 개발할 경우 무작위로 추출해달라고 하는 요청을 가끔 받습니다. 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절 안에 묶을 필요없습니다. 이럴땐 오라클 보다 편하네요.