랜덤추출 시 특정 컬럼을 기준으로 각 한개씩만 추출하기 위한 목적으로 사용
부서별로 각 한명씩만 랜덤으로 추출하는 쿼리를 작성하기 위해 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 |