반응형
Oracle 쿼리의 각 행에 난수 생성
테이블의 모든 행을 선택한 후 1~9 사이의 난수를 선택합니다.
select t.*, (select dbms_random.value(1,9) num from dual) as RandomNumber
from myTable t
그러나 난수는 행마다 동일하며 쿼리 실행마다 다를 뿐입니다.같은 실행에서 행마다 숫자를 다르게 하려면 어떻게 해야 합니까?
뭐 그런 거?
select t.*, round(dbms_random.value() * 8) + 1 from foo t;
편집: David은 이것이 1과 9에 불균일한 분포를 가져온다고 지적했습니다.
그가 지적한 바와 같이, 다음 사항이 더 나은 분포를 제공합니다.
select t.*, floor(dbms_random.value(1, 10)) from foo t;
처음에는 이게 효과가 있을 줄 알았어요.
select DBMS_Random.Value(1,9) output
from ...
단, 출력값의 균등분포는 생성되지 않습니다.
select output,
count(*)
from (
select round(dbms_random.value(1,9)) output
from dual
connect by level <= 1000000)
group by output
order by 1
1 62423
2 125302
3 125038
4 125207
5 124892
6 124235
7 124832
8 125514
9 62557
내 생각에 그 이유는 꽤 명백하다.
다음과 같은 것을 사용하는 것이 좋습니다.
floor(dbms_random.value(1,10))
이 때문에,
select output,
count(*)
from (
select floor(dbms_random.value(1,10)) output
from dual
connect by level <= 1000000)
group by output
order by 1
1 111038
2 110912
3 111155
4 111125
5 111084
6 111328
7 110873
8 111532
9 110953
필요 없다select … from dual
, 다음과 같이 적어주세요.
SELECT t.*, dbms_random.value(1,9) RandomNumber
FROM myTable t
라운드만 사용하면 두 끝 번호(1과 9)의 빈도가 낮아지고 1과 9 사이의 정수 분포를 얻을 수 있습니다.
SELECT MOD(Round(DBMS_RANDOM.Value(1, 99)), 9) + 1 FROM DUAL
언급URL : https://stackoverflow.com/questions/1568630/generating-random-number-in-each-row-in-oracle-query
반응형
'source' 카테고리의 다른 글
ng-repeat 디렉티브의 "priority"는 무엇을 변경할 수 있습니까? (0) | 2023.02.13 |
---|---|
테마를 사용하지 않고 WordPress에서 HTML 사이트를 호스팅하는 방법은 무엇입니까?그게 가능한가요? (0) | 2023.02.13 |
사전과 같은 JSON 스키마 (0) | 2023.02.09 |
Yoast Wordpress SEO 플러그인에서 사용자 지정 표준 URL 설정 (0) | 2023.02.09 |
ReactJS 프로젝트(폴더) 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.02.09 |