본문 바로가기
오라클 게시판/오라클 함수

【오라클(Oracle) 함수】 FIRST 함수

by 기서무나구물 2018. 11. 20.

포스팅 목차

    o FIRST

     


    문 법

    first::=

     


    목 적

    FIRST and LAST 함수는 행을 정렬한 후 첫 번째나 마지막 행을 추출한다.

    FIRST와 LAST는 매우 유사한 함수이다. 그룹별 또는 전체 데이터에 대하여 FIRST와 LAST 함수는 데이터를 정렬한 후 그룹별(전체 데이터) FIRST(최초) 또는 LAST(최종) 값을 선택하여 지정한 작업을 수행한다. 집계 함수 또는 분석함수에서 이용될 수 있다.

    만약 하나의 행에 FIRST 또는 LAST로서 순위를 지정하면, 집계 함수는 하나의 행으로 구성된 값을 반환한다..

    이 함수는 임수로써 임의 수치형 데이터 타입 또는 수치형 데이터로 암묵적으로 변환 가능한 비수치형 데이터형을 취한다. 이 함수는 인수의 수치형과 같은 데이터형을 반환한다.

    소트 된 그룹의 첫 번째 또는 마지막 행의 값이 필요하고, 그 값이 소트 키가 아닌 경우에는, FIRST와 LAST함수는 self join 또는 VIEW에 대한 필요성을 배제하고, 더 좋은 퍼포먼스를 낸다.

    • aggregate_function은 MIN, MAX, SUM, AVG, COUNT, VARIANCE, STDDEV함수 중에 하나이다. 그것은 FIRST 또는 LAST 중에 하나로 순위화 된 행으로부터 값을 조작한다. 만약 단지 하나의 행이 FIRST 또는 LAST로 순서화되는 경우, 집계 함수는 단일(집계가 아닌) 세트로 조작된다.
    • DENSE_RANK FIRST 또는 DENSE_RANK LAST은 최소(FIRST) 또는 최대(LAST) 밀도 순위를 가지는 행만을 집계할 것이다.

    OVER 구문을 지정함에 의해서 분석 함수로써 FIRST와 LAST함수를 이용할 수 있다. query_partitioning_clause는 이 함수를 가지는 OVER구문의 일부로 유효하다.

     


    관련 함수

    함수명 함수내용
    FIRST 그룹별 또는 전체 데이터에 대하여 FIRST와 LAST 함수는 데이터를 정렬한 후 그룹별(전체 데이터) FIRST(최초) 또는 LAST(최종) 값을 선택하여 지정한 작업을 수행한다.
    FIRST_VALUE 그룹(또는 전체 데이터) 별로 데이터를 정렬 후 지정한 변수의 첫 번째 값을 반환한다.
    LAG 이 함수는 Self 조인 작업 수행하지 않고, 하나의 테이블을 접근하면서 여러 개의 행에 동시에 접근(Access)하여 작업한다. LAG 함수는 현재 위치를 기준으로 이전에 위치한 행에 접근하여 작업을 수행한다.
    LAST FIRST and LAST함수는 매우 유사한 함수이다. 양쪽 함수 모두 그룹별 또는 전체 데이터에 대하여 데이터를 지정한 정렬 순서 기준으로 정렬한 후 그룹별(또는 전체 데이터) FIRST(최초) 또는 LAST(최종) 값을 선택하여 지정한 작업을 수행한다.
    LAST_VALUE 윈도우 그룹(또는 전체 데이터) 별로 데이터를 정렬 후 지정한 변수의 마지막 값을 반환한다.
    LEAD Self 조인 작업을 수행하지 않고, 하나의 테이블을 접근하면서 여러 개의 행에 동시에 접근(Access)하여 작업한다. 쿼리에서 수행되는 행의 Series나 커서의 위치를 지정하면, LEAD 함수는 해당 위치 이후에 존재하는 물리적 Offset의 행에 ACCESS 한다.

     


    예 제

    집계함수 예제

    다음 예제는 샘플 테이블 hr.employees의 각 부서별로 가장 적은 수수료를 지급받는 종업원들의 최저 급여와 가장 많은 수수료를 가지는 종업원 사이에서 최고 급여를 반환한다.

    Oracle Program
    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;

     

    Results
    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      12000
              110       8300      12000
                        7000       7000

     


    분석함수 예제

    다음 예제는 이전 예제와 같은 계산을 하지만, 해당 부서의 각 종업원에 대한 결과를 반환한다.

    Oracle Program
    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;

     

    Results
    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      12000
    Higgins                       110      12000       8300      12000
    Grant                                   7000       7000       7000

    이 두 개의 함수의 출력을 비교하기 위하여 XMLFOREST를 참조.

     


    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크
    반응형

    댓글