본문 바로가기

[오라클 레퍼런스 함수] FIRST - 그룹 내 첫 번째 값 반환

by ㅇㅍㅍ 2023. 8. 5.
[오라클 레퍼런스 함수] FIRST - 그룹 내 첫 번째 값 반환
728x90

FIRST

 

구문

aggregate_function
   KEEP
   (DENSE_RANK FIRST ORDER BY
    expr [ DESC | ASC ]
         [ NULLS { FIRST | LAST } ]
    [, expr [ DESC | ASC ]
            [ NULLS { FIRST | LAST } ]
    ]...
   )
   [ OVER ( [query_partition_clause] ) ]

 

참고:

ORDER BY 절과 OVER 절의 구문, 의미, 그리고 제약 조건에 대한 정보는 "Analytic Functions"에 대한 내용을 참조하세요.

 

목적

FIRSTLAST는 매우 유사한 함수입니다. 둘 다 주어진 정렬 기준에 따라 FIRST 또는 LAST로 랭크되는 일련의 행들의 값을 대상으로 하는 집계 함수와 분석 함수입니다. FIRST 또는 LAST로 랭크되는 행이 하나만 있는 경우, 집계는 하나의 요소를 가진 집합에서 작동합니다.

OVER 절을 생략하면 FIRSTLAST 함수는 집계 함수로 처리됩니다. 이 함수들을 분석 함수로 사용하려면 OVER 절을 지정해야 합니다. query_partition_clause는 이 함수들과 함께 사용할 수 있는 OVER 절의 유일한 부분입니다. OVER 절을 포함하지만 query_partition_clause를 생략하면 함수는 분석 함수로 처리되지만, 분석을 위해 정의된 창은 전체 테이블입니다.

이 함수들은 숫자 데이터 유형이나 숫자 데이터 유형으로 암시적으로 변환될 수 있는 비숫자 데이터 유형을 인수로 받습니다. 함수는 인수의 숫자 데이터 유형과 동일한 데이터 유형을 반환합니다.

 

FIRSTLAST 함수는 정렬된 그룹에서 첫 번째 또는 마지막 행의 값을 필요로 할 때, 그러나 필요한 값이 정렬 키가 아닐 경우, 자체 조인이나 뷰의 필요성을 제거하고 더 나은 성능을 제공합니다.

 

  • aggregate_function 인수는 MIN, MAX, SUM, AVG, COUNT, VARIANCE 또는 STDDEV 함수 중 하나입니다. 이 함수는 FIRST 또는 LAST로 랭크되는 행들의 값을 대상으로 작동합니다. FIRST 또는 LAST로 랭크되는 행이 하나만 있는 경우, 집계는 단일 (비집계) 집합에서 작동합니다.
  • KEEP 키워드는 의미적으로 명확성을 제공합니다. aggregate_function에 대해 FIRST 또는 LAST 값만 반환되도록 지정합니다.
  • DENSE_RANK FIRST 또는 DENSE_RANK LAST는 Oracle 데이터베이스가 최소 (FIRST) 또는 최대 (LAST) dense rank (또는 olympic rank)를 가진 행들에 대해서만 집계하도록 나타냅니다.

 

참고:

LAST와 암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하십시오.

 

집계 예제

다음 예제는 샘플 테이블 hr.employees의 각 부서에서, 가장 낮은 커미션을 받는 직원들 중 최소 급여와 가장 높은 커미션을 받는 직원들 중 최대 급여를 반환합니다.

SELECT department_id,
       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) "Worst",
       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) "Best"
  FROM employees
  GROUP BY department_id
  ORDER BY department_id;

DEPARTMENT_ID      Worst       Best
------------- ---------- ----------
           10       4400       4400
           20       6000      13000
           30       2500      11000
           40       6500       6500
           50       2100       8200
           60       4200       9000
           70      10000      10000
           80       6100      14000
           90      17000      24000
          100       6900      12008
          110       8300      12008
                    7000       7000

 

분석 예제

다음 예제는 이전 예제와 동일한 계산을 수행하지만, 각 부서 내의 각 직원에 대한 결과를 반환합니다.

SELECT last_name, department_id, salary,
       MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
         OVER (PARTITION BY department_id) "Worst",
       MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
         OVER (PARTITION BY department_id) "Best"
   FROM employees
   ORDER BY department_id, salary, last_name;

LAST_NAME           DEPARTMENT_ID     SALARY      Worst       Best
------------------- ------------- ---------- ---------- ----------
Whalen                         10       4400       4400       4400
Fay                            20       6000       6000      13000
Hartstein                      20      13000       6000      13000
. . .
Gietz                         110       8300       8300      12008
Higgins                       110      12008       8300      12008
Grant                                   7000       7000       7000

 


출처: 오라클 레퍼런스

원문 링크: Oracle FIRST 함수 문서

 

반응형

댓글