답변에 감사드립니다... 하지만 제가 원하는게 아니네요.
레코드의 갯수가 고정적이지 않습니다.
위의 내용은 예를 들어서 말씀드린거구여.
250000 건중(정확치는 않음) 표본으로 5%의 데이타를 추출하려고 하는 겁니다. 좀 더 나오는건
상관이 없을듯 싶은데 적게 나오면 문제가 될듯 싶어서요.
처음 보는 함수라서 좀 찾아 봤는데요..
결론은 대락적인 record를 return 한다네요..
항상 같은 수의 레코드를 return하는게 하니라..
sample(10)이면 10%내외의 대략 값의 row를 리턴한다는군요..
더 나올수도 덜나올수도 있나는 거죠...
아래 내용이 DB 참조할때 자주 가는 사이트에서 발췌한것인데요...
참고하세요.
---------------------------------------------------------------------
2. Oracle 8.1.x 이상(9i 포함)
오라클은 데이터를 access 할때 Full Table Scan, Random Access 방식은 모든 버전에서 제공한
방식이다. 8.1.x 이상 버전에는 이에 추가적으로 Sample Table Scan 방식을 제공한다. 이 Scan
방식을 이용하면 Random 하게 데이터를 손쉽게 추출할수 있다.
Sample Table Scan 방식을 간략하게 설명하고 이를 이용하여 어떻게 SQL에서 Random한 데이터를
추출할수 있는지를 예제를 통하여 설명하겠다.
2.1. Sample Table Scan
Full Table Scan 방식은 모든 행을 Scan하기 위하여 테이블에 관련된 모든 블록을 차례로 읽고,
각 레코드마다 where 조건을 만족하는지를 확인한다. Random Access 방식은 인덱스를 이용하여
where 조건의 일부를 만족하는 레코드를 선택 테이블에 관련된 블록을 랜덤하게 읽고, 나머지
where 조건을 만족하는 레코드를 출력한다. Sample Table Scan 방식은 Table의 데이터중
임의로 주어진 비율 만큼의 데이터를 읽고 그중 where 조건을 만족하는 레코드를 리턴한다.
2.2. Random Sample 추출 SQL
SELECT .....
FROM table_name SAMPLE {BLOCK option} (Sample Percent) <- 이 부분임
WHERE ....
GROUP BY ....
HAVING ....
ORDER BY
- BLOCK option 사용시 블록 단위로 Sample 데이터를 주어진 비율(Sample Percent) 만큼 읽은후
where 조건을 만족하는지 확인한다.
- BLOCK option 생략시 레코드 단위로 Sample 데이터를 주어진 비율(Sample Percent) 만큼 읽은후
where 조건을 만족하는지 확인한다.
- 비율(Sample Percent)는 0.000001 와 99.999999값을 지원하며, 0 또는 100을 지원하지 않는다.
(주의사항) 레코드 건수가 작은 테이블에서 sample이나 sample block 사용시에는 일정
비율(Sample Percent)의 sample data가 return되지 않을 수있으며, 비율의 의미는
대약적인 값이다. 즉 동일 SQL을 반복해서 수행해도 항상 같은 수의 레코드를
리턴하는 것은 아니다.
-------------------------------------------------------------------------------------------
출처 : www.en-core.com 의 솔루션웨어하우스 내의 게시물중에서...
-------------------------------------------------------------------------------------------
sample(n) 은 총 row수에서 n%의 row를 가져옵니다.
n개의 row를 고정적을 볼라면 where 절에서 rownum 으로 제한하면 어떨까요?
select * from tbl_test sample(10) where rownum <= 10;
흠...그리고 dbms_random 이라는 것도 있다고 하네요...이넘은 제가 안써본거라서...기본적으로 설치되는 패키지 인지도 모르겟습니다.
그럼.