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