문법 |
목적 |
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구문의 일부로 유효하다.
예제 |
집계 예제
다음 예제는 샘플 테이블 hr.employees의 각 부분에서 가장 적은 수수료를 가지는 종업원
사이에서 최저 급여와 가장 많은 수수료를 가지는 종업원 사이에서 최고 급여를 반환한다.
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; 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
다음 예제는 이전 예제와 같은 계산을 하지만, 해당
부서의 각 종업원에 대한 결과를 반환한다.
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;
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