본문 바로가기
SQL

ORACLE ROW_NUMBER() OVER ( PARTITION BY ORDER BY DBMS_RANDOM.RANDOM )

by sooyeoon 2023. 4. 26.

랜덤추출 시 특정 컬럼을 기준으로 각 한개씩만 추출하기 위한 목적으로 사용

 

부서별로 각 한명씩만 랜덤으로 추출하는 쿼리를 작성하기 위해 DISTINCT 나 GROUP BY를 사용했지만 적용되지 않았고 

GROUP BY 이후 HAVING 절로 ROWNUM 을 적용하지 못했는데,

SELECT 절에 ROW_NUMBER()로 특정 컬럼에 대한 값을 한 개씩 가져올 수 있었다.

 

SELECT EMPNO,EMPNM, RN, DEPTNM
FROM (
SELECT EMPNO, EMPNM, DEPTNM, 
ROW_NUMBER() OVER ( PARTITION BY DEPTNM ORDER BY DBMS_RANDOM.RANDOM ) AS rn
FROM
(SELECT A.EMPNO, A.EMPNM, B.DEPTNM 
FROM A, B, C, D
WHERE A.EMPNO = C.EMPNO
AND B.DEPT_CODE = D.DEPT_CODE) 
ORDER BY DBMS_RANDOM.RANDOM()
)
WHERE  rn = 1
AND ROWNUM<=10;

RN 컬럼과 함께 출력해보면 각 컬럼당 첫 번째 값( rn =1 )만 가져온 것을 확인할 수 있다.

* 참고 링크

https://stackoverflow.com/questions/49668354/oracle-sql-how-to-select-having-distinct-columns

 

Oracle SQL, how to select * having distinct columns

I want to have a query something like this (this doesn't work!) select * from foo where rownum < 10 having distinct bar Meaning I want to select all columns from ten random rows with distinct ...

stackoverflow.com

 

'SQL' 카테고리의 다른 글

ORACLE : ORA-30076: 발췌 소스에 발췌 필트가 부적당합니다  (0) 2023.05.04
ORACLE : ROW_NUMBER, RANK  (0) 2023.05.02
ORACLE DBMS_RANDOM + ROWNUM [LIMIT]  (0) 2023.04.26
ORACLE TRUNC : 특정 달의 첫 날  (0) 2023.04.25
Oracle UPDATE  (0) 2023.03.10