GROUPBY_NUM() 함수

설명

GROUPBY_NUM() 함수는 ROWNUM 혹은 INST_NUM() 함수와 함께, 결과 행들의 개수를 제한하는 목적으로 사용된다. 단, 차이점은 GROUP BYHAVING 절 뒤에 결합되어 사용되며, 이미 정렬을 수행한 결과에 대해 순서를 부여한다는 점이다. 또한, INST_NUM() 함수는 스칼라(scalar) 함수이지만, GROUPBY_NUM() 함수는 집계 함수의 일종이다.

즉, GROUP BY 절이 포함된 SELECT 문장에서 조건 절에 ROWNUM을 이용하여 일부 결과 행들만 조회하는 경우, ROWNUM이 먼저 적용된 후 GROUP BY에 의한 그룹 정렬이 수행된다. 반면, GROUPBY _NUM() 함수를 이용하여 일부 결과 행들만 조회하는 경우, GROUP BY에 의한 그룹 정렬이 이루어진 결과에 대해서 ROWNUM이 적용된다.

구문

GROUPBY_NUM()

예제

다음은 history 테이블에서 과거 5개의 올림픽에 대해서 최단 기록을 조회하는 예제이다. (demodb)

--Group-ordering first and then limiting rows using GROUPBY_NUM()

SELECT host_year, MIN(score) FROM history  

GROUP BY host_year HAVING GROUPBY_NUM() BETWEEN 1 AND 5;

 

=== <Result of SELECT Command in Line 2> ===

 

    host_year  min(score)

===================================

         1968  '8.9'

         1980  '01:53.0'

         1984  '13:06.0'

         1988  '01:58.0'

         1992  '02:07.0'

 

 

5 rows selected.

 

--Limiting rows first and then Group-ordering using ROWNUM

SELECT host_year, MIN(score) FROM history

WHERE ROWNUM BETWEEN 1 AND 5 GROUP BY host_year;

 

=== <Result of SELECT Command in Line 2> ===

 

    host_year  min(score)

===================================

         2000  '03:41.0'

         2004  '01:45.0'

 

 

2 rows selected.