database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40242 게시물 읽기
No. 40242
오라클 랜덤하게 1건 조회하기
작성자
JHoon
작성일
2013-09-01 13:43
조회수
6,922

 pool 개념의 테이블이 있는데 그중 랜덤하게 1건만 조회하는 쿼리를 다음과 같이 짜보았습니다.

 

 

from (

    select rownum rno

            ,column1

    from table1

    where stat_cd = '10'

)

where rno = ROUND(DBMS_RANDOM.VALUE(1, (select count(*) from table1 where stat_cd='10')),0)

 

 

 

그런데 문제는 랜덤하게 1건만 나오는게 목적이었는데

 

안나올때도 있고, 여러건 나올때도 있는게 문제입니다.

 

이런식으로 쿼리를 작성하면 무조건 하나만 나오거든요?

 

 

from (

    select rownum rno

            ,key_id

    from tbwf30a

    where stat_cd = '10'

)

 

 

 

뭐가 문제일까요?

이 글에 대한 댓글이 총 3건 있습니다.

where 절에 있는 dbms_random.value 가 하나의 상수값이 아니라,

인라인뷰에 있는 건수 만큼 반복해서 생성되서 rno 컬럼값과 비교해서 

안나올때도있고, 여러건도 나오는것 같네요.


아래는, SELECT 시 랜덤정렬해서 ROWNUM 으로 1건만 가져오게했습니다.

참고하세요.

 

 WITH t(cd, col1) AS(

SELECT '10', '10-1' FROM dual UNION ALL
SELECT '10', '10-2' FROM dual UNION ALL
SELECT '10', '10-3' FROM dual UNION ALL
SELECT '10', '10-4' FROM dual UNION ALL
SELECT '10', '10-5' FROM dual
)
SELECT *
  FROM (SELECT *
          FROM t
         WHERE cd = '10'
         ORDER BY dbms_random.value
        )
 WHERE ROWNUM = 1 
아린(arin76)님이 2013-09-01 17:32에 작성한 댓글입니다.
이 댓글은 2013-09-01 17:32에 마지막으로 수정되었습니다.

sample 함수도 알아보세

채용근(taiji97)님이 2013-09-01 19:15에 작성한 댓글입니다.

서브쿼리 위치만 바꿔주면 될 듯 합니다.

 - 변경전 : 랜덤함수(서브쿼리)

 - 변경후 : 서브쿼리(랜덤함수)

1~count까지 round하시면 1번과 끝번호는 다른번호 나올 확율의 반밖에 안될듯.
 WHERE rno = (SELECT TRUNC(dbms_random.value(1, COUNT(*)+1))
                FROM table1
               WHERE stat_cd = '10'
              )

마농(manon94)님이 2013-09-02 11:40에 작성한 댓글입니다.
이 댓글은 2013-09-02 11:44에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
40246잘 아시겠지만, 주민번호... 검증 알고리즘(algorism)입니다.
박재덕
2013-09-03
6601
40245Mview 생성시 오류 관련 문의 [4]
초보
2013-09-03
5855
40243TABLE 에서 A칼럼 8자리 값이 B칼럼 처음 8자리와 틀리면 저장되지 않게 지정하는 방법 문의 [6]
박재덕
2013-09-02
6455
40242오라클 랜덤하게 1건 조회하기 [3]
JHoon
2013-09-01
6922
40241수정-특정 Table Insert Update 시 작업한 P/C IP 확인 문의 [2]
박재덕
2013-08-29
6346
40240BLOB형을 사용을 하려고 하는데요.. [1]
조우연
2013-08-29
5471
40239트리거 생성 에러 .... [6]
질문
2013-08-29
6438
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다