select * from ( select * from 테이블 order by dbms_random.value ) 기본적인 오라클 랜덤 함수 예이다. select row_number() over(partition by 중복조회컬럼 order by order by 정렬컬럼) 재명명할 컬럼이름 중복제거 하면서 전체값 가져오는 방법이다. EX) select * from row_number() over(partition by a.kind order by a.kind) cnt, a.kind --파란색 부분은 같은 강좌 단원 중복제거 한것입니다 FROM elt_course a, elt_org_course b WHERE b.org_class1 = 'S110' AND b.open_state = '1' AND b.a_admission = '1' AND a.course_id = b.course_id order by dbms_random.value -- 중복 제거문을 썼지만 1로 정해주지 않으면 같은 단원이 다 나오기때메 하나만 나오게 한것입니다. and rownum <= 4 제가 만든 간단한 추천강좌 랜덤 쿼리입니다. [ 중복된 값 뽑아오기] select colum,count(*) from table group by colum having count(*) >1 [ DBMS_RANDOM ] select dbms_random.value(1,1000) num from dual; select dbms_random.string('U', 20) str from dual;
-
랜덤으로 로우 가져오기 with t as( select 'G01' a,'test1' b,'01' c from dual union select 'G02','test2','03' from dual union select 'G03','test3',null from dual union select 'G04','test4',null from dual ) select * from t; --결과값 -- A B C --G01 test1 01 --G02 test2 03 --G03 test3 (random) --G04 test4 (random) --위의 C항 null에 01~10중 test1,test2의 C값(01,03)이 겹치지않는 값을 출력하고자 합니다. --최종으로는 C의 값은 00000000 =8자리의 값 랜덤함수로 돌려 인서트시키는 방법을 찾고있습니다. --고수님들 도와주세요 ㅜㅜ --================================================================================== with t as( select 'G01' a,'test1' b,01 c from dual union select 'G02','test2',03 from dual union select 'G03','test3',11 from dual union select 'G04','test4',null from dual ) select * from t; --위의 테이블 t테이블 c컬럼에 아래의 값 삽입 삽입시 t테이블의c컬럼값들을 비교하여 같은값이 있으면 다시 --아래의 테이블 셀렉트..다른값이면 insert 시키는 방법... --머리 뿌게지겠네요 ㅜㅜ select * from (select rn from( SELECT lv,ROW_NUMBER() OVER(ORDER BY dbms_random.value) rn FROM (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 20) ORDER BY lv) where lv = 1) ; bbuljj 2014. 12. 17. 13:06 SELECT DBMS_RANDOM.RANDOM FROM DUAL; --랜덤 숫자 (양수/음수) SELECT DBMS_RANDOM.VALUE FROM DUAL; --랜덤 숫자 (0~1 사이) SELECT DBMS_RANDOM.VALUE(1,1000) RANDOM FROM DUAL; --랜덤 숫자 (1~1000 사이) SELECT DBMS_RANDOM.VALUE(100000000000, 999999999999) RANDOM FROM DUAL; --랜덤 숫자 (천억~조-1 사이) SELECT DBMS_RANDOM.STRING('U', 20) STR FROM DUAL; --대문자 20글자 랜덤 SELECT DBMS_RANDOM.STRING('L', 20) STR FROM DUAL; --소문자 20글자 랜덤 SELECT DBMS_RANDOM.STRING('A', 20) STR FROM DUAL; --대문자+소문자 20글자 랜덤 SELECT DBMS_RANDOM.STRING('X', 20) STR FROM DUAL; --대문자+숫자 20글자 랜덤 SELECT DBMS_RANDOM.STRING('P', 20) STR FROM DUAL; --대문자+소문자+숫자+특수문자 20글자 랜덤 출처) http://aspx.tistory.com/ 본업 1억 미만의 범위의 2만개의 난수 생성 (중복없이) : LPAD , DBMS_RANDOM.VALUE , CONNECT BY LEVELoracle dbms_random 1억 미만의 범위의 2만개의 난수 생성 SELECT LPAD(ROUND(DBMS_RANDOM.VALUE(0, 99999999)),8,0) AS nansu FROM dual CONNECT BY LEVEL <= 20000; 사용한 함수 : LPAD , DBMS_RANDOM.VALUE , CONNECT BY LEVEL -------------------------- 쿼리분석 SELECT random FROM dual; SELECT LPAD(ROUND(DBMS_RANDOM.VALUE(0, 99999999)),8,0) AS nansu FROM dual CONNECT BY LEVEL <= 20000; SELECT LPAD(nansu, 8, 0) FROM (SELECT LEVEL AS nansu FROM dual CONNECT BY LEVEL <= 99999999 ORDER BY DBMS_RANDOM.RANDOM ) WHERE ROWNUM <= 10000; SELECT LPAD(ROUND(DBMS_RANDOM.VALUE(0, 99999999)),8,0) FROM dual CONNECT BY LEVEL <= 20000 ORDER BY DBMS_RANDOM.RANDOM; SELECT LPAD(ROUND(DBMS_RANDOM.VALUE(0, 99999999)),8,0) AS nansu FROM (SELECT LEVEL AS nansu FROM dual CONNECT BY LEVEL <= 20000 ORDER BY DBMS_RANDOM.RANDOM ) |