[Oracle] 집계함수와 WITHIN GROUP( ) 문 사용법

WITHIN GROUP( )는 OVER()와 함께 SQL에서 윈도우 함수를 사용할 때 사용되는 절입니다. OVER( )와 WITHIN GROUP( )의 특징은 아래와 같습니다.

  • OVER( )는 윈도우 함수의 파티션 및 정렬을 지정하는 데 사용됩니다. 윈도우 함수는 결과 집합 내에서 데이터의 부분 집합에 대해 계산을 수행하고, OVER( ) 절은 이러한 부분 집합을 정의합니다. 예를 들어, SUM()이나 AVG()와 같은 집계 함수를 사용하여 파티션 내에서 합계 또는 평균을 계산할 때 유용합니다.
  • WITHIN GROUP( )은 LISTAGG( )와 같은 일부 집계 함수에서 사용됩니다. 이 절은 집계 함수가 그룹 내에서 데이터를 결합하는 순서를 명시합니다. 즉, 결과를 결합할 때 데이터를 어떻게 정렬할지 지정합니다.
함수명 목적 및 기능
RANK( ) 정렬된 결과 집합에서 각 행의 순위를 할당하며 동일한 값이 있을 경우에는 동일한 순위가 할당되며, 그 다음 순위는 건너뛰고 다음 순위가 할당됩니다.
DENSE_RANK( ) RANK와 유사하지만, 동일한 값이 있을 경우에도 순위를 중복 없이 순차적으로 할당하며 순위가 건너뛰지 않고 연속적으로 할당됩니다.
LISTAGG( ) 여러 행의 값을 그룹화하여 하나의 문자열로 결합하는데 사용됩니다. 이 함수는 주로 문자열 연결(concatenation) 작업에 유용하게 사용됩니다.
PERCENTILE_DISC( ) 이산형(discrete) 백분위수를 계산하며, 순위를 기반으로 하여 결과 집합 내에 존재하는 실제 값 중 가장 가까운 순위에 있는 값을 반환합니다.
PERCENTILE_CONT( ) 연속형(continuous) 백분위수를 계산하며, 선형 보간(linear interpolation)을 사용하여 결과 집합 내에서 값들 사이의 추정된 값을 반환합니다.

OVER( ) 문 사용법 글에서 사용한 데이터를 사용하여 각 함수들의 사용법 및 결과값을 알아보겠습니다.

RANK( ), PERCENT_RANK( ) 쿼리 결과
SELECT RANK(68000) WITHIN GROUP (ORDER BY SALARY) AS RANK
     , PERCENT_RANK(68000) WITHIN GROUP (ORDER BY SALARY) AS PERCENT_RANK
FROM EMPLOYEE_TAB ;
RANK(), PERCENT_RANK() 쿼리 결과
LISTAGG( ) 쿼리 결과
SELECT DEPARTMENT
     , LISTAGG(EMPLOYEE_NAME, ', ') WITHIN GROUP (ORDER BY HIRE_DATE) AS LISTAGG
FROM EMPLOYEE_TAB
GROUP BY DEPARTMENT;
LISTAGG( ) 쿼리 결과
PERCENTILE_DISC( ), PERCENTILE_CONT( ) 쿼리 결과
SELECT DEPARTMENT
     , LISTAGG(SALARY, ', ') WITHIN GROUP (ORDER BY SALARY) AS LISTAGG 
     , PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY SALARY) AS PERCENTILE_DISC
     , PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY SALARY) AS PERCENTILE_CONT
FROM EMPLOYEE_TAB
GROUP BY DEPARTMENT;
PERCENTILE_DISC( ), PERCENTILE_CONST( ) 쿼리 결과

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다