RANDOM, RANK 함수 문의입니다 0 3 1,641

by Kaiger [2020.07.21 18:59:27]


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 절 때문에 항상 같은 사람만 나오고 있는데

랜덤하게 나올 수가 있을까요??

감사합니다.

by pajama [2020.07.21 20:32:11]

rank함수 안에서 order by dbms_random.value를 하면 되지 않을까요?


by Kaiger [2020.07.22 08:59:06]

아... 그렇네요 감사합니다 !!


by 마농 [2020.07.22 09:19:22]

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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입