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

【오라클(Oracle) SQL 함수】 FIRST_VALUE 함수

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

포스팅 목차

    o FIRST_VALUE

     


    문법

    first_value::=

     


    목적

    FIRST_VALUE함수는 분석 함수이다. 그룹(또는 전체 데이터) 별로 데이터를 정렬 후 지정한 변수의 첫 번째 값을 반환한다.

    만약 집합 내에서 첫 번째 값이 NULL이라면, IGNORE NULLS 옵션을 별도로 지정하지 않으면 NULL을 반환한다. 이 설정은 데이터 조밀화에 유용하다. 만약 IGNORE NULLS을 지정하면, FIRST_VALUE함수는 집합 내에서 최초 NON_NULL값을 반환하고, 만약 모든 값이 NULL이라면 NULL을 반환한다. 데이터 조밀화의 예는  "Using Partitioned Outer Joins: Examples"  참조.

    expr에 대하여는 FIRST_VALUE 또는 다른 분석 함수를 이용할 수 없다. 분석 함수는 다중 분석 함수를 할 수 없고, expr에 대하여 다른 편성 함수 표현을 이용할 수 없다.

     


    패키지 함수 비교(Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table)

     


    관련 함수

    함수명 함수내용
    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 한다.

     


    예제

    다음 예제는 부서 아이디 90의 각 종업원에 대하여, 그 부서에서 급여가 제일 적은 종업원의 이름을 선택한다.

    Oracle Program
    SELECT department_id, last_name, salary, 
           FIRST_VALUE(last_name)
                 OVER (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) AS lowest_sal
    FROM   ( SELECT * FROM employees WHERE department_id = 90
             ORDER BY employee_id);

     

    Results
    DEPARTMENT_ID LAST_NAME         SALARY LOWEST_SAL
    ------------- ------------- ---------- -------------------------
               90 Kochhar            17000 Kochhar
               90 De Haan            17000 Kochhar
               90 King               24000 Kochhar

     


    다음 예제는 FIRST_VALUE함수의 비결정적 성질을 설명한다. Kochhar과 DeHaan은 같은 급여를 가지며, 그렇기 때문에 인접한 행에 있다. Kochhar은 행이 employee_id에 의해 순서화된 서브 쿼리에 의해 반환되기 때문에 첫 번째에 나타난다. 그러나, 만약 서브 쿼리에 의해 반환되는 행이 employee_id로 내림차순으로 순서화되었으면, 다음의 예제에서 처럼 다른 값을 반환한다.

    Oracle Program
    SELECT department_id, last_name, salary,
           FIRST_VALUE(last_name)
                 OVER (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) as fv
    FROM  ( SELECT * FROM employees WHERE department_id = 90
            ORDER by employee_id DESC);

     

    Results
    DEPARTMENT_ID LAST_NAME         SALARY FV
    ------------- ------------- ---------- -------------------------
               90 De Haan            17000 De Haan
               90 Kochhar            17000 De Haan
               90 King               24000 De Haan

     


    다음 예제는 unique키로 순서화에 의해 FIRST_VALUE함수를 결정하는 방법을 보인다.

    Oracle Program
    SELECT department_id, last_name, salary, hire_date, 
           FIRST_VALUE(last_name) OVER (ORDER BY salary ASC, hire_date ROWS UNBOUNDED PRECEDING) AS fv
    FROM   ( SELECT * FROM employees 
             WHERE department_id = 90 ORDER BY employee_id DESC);

     

    Results
    DEPARTMENT_ID LAST_NAME         SALARY HIRE_DATE FV
    ------------- ------------- ---------- --------- ---------------
               90 Kochhar            17000 21-SEP-89 Kochhar
               90 De Haan            17000 13-JAN-93 Kochhar
               90 King               24000 17-JUN-87 Kochhar

     


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

     

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

    댓글