포스팅 목차
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 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 |
'오라클 게시판 > 오라클 함수' 카테고리의 다른 글
【오라클(Oracle) SQL 함수】 FROM_TZ 함수 (0) | 2018.11.20 |
---|---|
【오라클 SQL 함수】 FLOOR 함수 (0) | 2018.11.20 |
【오라클(Oracle) 함수】 FIRST 함수 (0) | 2018.11.20 |
【오라클(Oracle) SQL 함수】 EXTRACTVALUE 함수 (2) | 2018.11.19 |
【오라클(Oracle) SQL 함수】 EXTRACT (XML) 함수 (0) | 2018.11.19 |
댓글