SELECT S.* FROM ( SELECT distinct(A.EMP_NO) AS hist_emp_no , A.EMP_NM , a.org_cd , rank() over(partition by org_cd order by EMP_NO desc) as rank FROM T_HRM_MST a, T_PER_RELEVANT_ORG c, T_PER_RELEVANT_ORG d WHERE A.ORG_CD = C.REL_ORG_CD_1(+) AND A.ORG_CD = D.REL_ORG_CD_2(+) AND A.COMPANY_ID = C.COMPANY_ID ORDER BY DBMS_RANDOM.VALUE ) S WHERE RANK <= 3 ORDER BY ORG_CD, RANK
안녕하세요
원하는 결과는 부서별로 랜덤하게 3명씩만 나오게 하려고 합니다
쿼리에서 RANK 의 ORDER BY 절 때문에 항상 같은 사람만 나오고 있는데
랜덤하게 나올 수가 있을까요??
감사합니다.
1. 조인도 이상하고
- 아우터조인과 이너조인 혼용하면 아우터조인 효과가 없습니다.
- 조인이 필요한지 의문? 조인된 테이블(c,d)이 전혀 사용되지 않음.
2. Distinct 사용도 이상하네요.
- 괄호를 사용했지만 Distinct 에는 괄호가 무의미합니다.
- 어떤 의도로 Distinct 를 사용했는지?
3. 예약어 사용
- RANK 와 같은 예약어를 별칭으로 사용하는 것은 좋지 않습니다.
SELECT * FROM (SELECT emp_no, emp_nm, org_cd , ROW_NUMBER() OVER(PARTITION BY org_cd ORDER BY DBMS_RANDOM.VALUE) rn FROM t_hrm_mst ) WHERE rn <= 3 ;