반응형

ROWNUM 이용하기

 

조회된 순서로 순번 부여

SELECT ROWNUM AS NO
         , A.*
FROM EMP A

 

Order By 절에 의해 정렬 순번이 변경이 될수 있어 Sub Query 조회 결과로 순번을 부여한다

SELECT ROWNUM AS NO
        , X.*
 FROM (
       SELECT A.*
         FROM EMP A
        ORDER BY A.ENAME
     ) X

 

 

분석함수(Analytic Function) - RANK, DENSE_RANK, ROW_NUMBER
이용하기

- RANK() : 중복 순위 다음은 해당 개수만큼 건너뛰고 반환
- DENSE_RANK() : 중복 순위 상관없이 순차적으로 반환
- ROW_NUMBER() : 중복과 관계 없이 무조건 순서대로 반환

 

  SELECT ID
       , SALARY
       -- 분석 함수의 ORDER BY 절을 사용하여 내림차순 정렬한 뒤 RANK() 함수가 순위를 반환
       -- 연봉이 높은 순으로 순위를 부여하며 중복 순위 다음은 해당 개수만큼 건너뛰고 반환
       , RANK() OVER (ORDER BY SALARY DESC)       RANK
       -- 연연봉이 높은 순으로 순위를 부여하며 중복 순위 상관없이 순차적으로 반환.
       , DENSE_RANK() OVER (ORDER BY SALARY DESC) RANK_DENSE_RANK
       -- 연봉이 높은 순으로 순번 부여하며 중복과 관계 없이 무조건 순서대로 반환
       , ROW_NUMBER() OVER (ORDER BY SALARY DESC) RANK_ROW_NUMBER
    FROM (
          SELECT 100 ID, 39000 SALARY FROM DUAL UNION ALL
          SELECT 101 ID, 30000 SALARY FROM DUAL UNION ALL
          SELECT 102 ID,  9000 SALARY FROM DUAL UNION ALL
          SELECT 103 ID, 17000 SALARY FROM DUAL UNION ALL  -- 중복
          SELECT 104 ID, 60000 SALARY FROM DUAL UNION ALL
          SELECT 105 ID,  9500 SALARY FROM DUAL UNION ALL
          SELECT 106 ID, 17000 SALARY FROM DUAL UNION ALL  -- 중복
          SELECT 107 ID, 37500 SALARY FROM DUAL UNION ALL
          SELECT 108 ID, 25000 SALARY FROM DUAL UNION ALL
          SELECT 109 ID,  5000 SALARY FROM DUAL UNION ALL
          SELECT 110 ID, 17000 SALARY FROM DUAL            -- 중복
      ) ;

 

 

부서별 월급이 높은순으로 정렬 및 순번 부여

 

▼ 부서별 집합(PARTITION BY DEPTNO) , 봉급 높은순으로 정렬(ORDER BY SAL)

     SELECT A.*
          -- 부서별 집합(PARTITION BY DEPTNO) , 봉급 높은순으로 정렬(ORDER BY SAL)
          , ROW_NUMBER() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) AS SAL_RANK
       FROM EMP A
      ORDER BY DEPTNO, SAL_RANK

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기