2016. 12. 29. 22:41

오라클 고급 함수에 대해서 알아보겠습니다.

고급 함수중에 데이터를 분석해서 순위를 결정하는 함수들이 있습니다.

이런 함수에 대해서 정리해보겠습니다.

 

1. RANK() 함수

  - 지정한 값에 대해서 순위를 매겨주는 함수입니다.

  - 동일한 값이 있을경우 같은 순위로 됩니다.

    (예를 들어 2등이 두명이 있을 경우 3등은 건너뛰고 2등 다음 4등이 됩니다.)

  - RANK() OVER(ORDER BY 필드)

  - RANK() OVER(PARTITION BY 필드 ORDER BY 필드)

 

 

2. DENSE_RANK() 함수

  - 지정한 값에 대해서 순위를 매겨주는 함수입니다.

  - 동일한 값이 있을경우 같은 순위로 됩니다.

    (예를 들어 2등이 2명이 있어도 다음은 3등이 됩니다.)

  - DENSE_RANK() OVER(ORDER BY 필드)

  - DENSE_RANK() OVER(PARTITION BY 필드 ORDER BY 필드) 

 

3. ROW_NUMBER() 함수

  - 지정한 값에 대해서 순위를 매겨주는 함수입니다.

  - 무조건 순서대로 순번을 리턴합니다.

  - ROW_NUMBER() OVER(ORDER BY 필드)

  - ROW_NUMBER() OVER(PARTITION BY 필드 ORDER BY 필드)

 

4. 순위 함수의 공통점과 차이점

  - RANK() , DENSE_RANK() 의 공통점은 동일값에 대해서는 같은 순위를 리턴하는 것입니다.

  - RANK() , DENSE_RANK() 의 차이점은 다음 순위가 이전순위+1 인지 , 이전순위+동점자수+1 인지 입니다.

 

5. 순위 함수 실습 예제

   - MONEY 값으로 순위를 매깁니다.

   - 출력되는 순서는 기본적으로 ORDER BY 절에 기술한 필드로 SORT를 하고 순위를 매기기 

     때문에 결과가 MONEY로 ORDER BY 된 순서대로 나옵니다.

     


6. 순위 함수 그룹핑 ( PARTITION BY )

  - OVER 부분에 PARTITION BY 를 이용하여 그룹핑해서 순위를 매길수도 있습니다.

  - 아래 샘플은 DEPT를 그룹핑후 순위를 매기는 것입니다.(동일부서내에서 순위를 매김)

  - 출력되는 순서는 DEPT부서로 그룹핑후 MONEY로 정렬후 순위를 매기기 때문에

    결과가 MONEY로 ORDER BY 된 순서대로 나옵니다.

    

순위 관련 함수에 대해서 알아보았습니다.

기본적인 쿼리로 작성한다면 쿼리가 복잡해지겠지만 오라클에서 제공하는 순위 함수를 쓴다면

위에서 한것과 같이 간단하게 처리가 가능합니다.

간단하다고 해서 무분별하게 사용하게 되면 쿼리 속도에 영향을 줄수 있습니다.


Posted by dlfma1985