Skip Headers

오라클 10g 함수
10g Release 1 (10.1)
Go to Documentation Home
HOME
Go to Book List
ORA_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
ORA_10G
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

FIRST_VALUE

문법

MAIN

first_value::=
Description of first_value.gif follows

그림 설명

목적

MAIN

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

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


 

예제

MAIN

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

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);

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로 내림차순으로 순서화 되었으면, 다음의 예제에서 처럼 다른 값을 반환한다.

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);

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함수를 결정하는 방법을 보인다.

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);

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