All thing of the world!

Oracle FIRST 설명 : 오라클 함수 본문

IT/Oracle DBMS

Oracle FIRST 설명 : 오라클 함수

WorldSeeker 2021. 4. 6. 09:14

1. 함수의 목적 
 
    Oracle FIRST는 집계 및 분석 함수을 보조하는 역할을 하는 함수로서 주어진 정렬에 따라 첫번째(FIRST) 순위가 매겨진 행 세트의 값 집합 작용한다.
    LAST도 유사한 기능이다.

    특이하게, 분석함수 및 집계함수의 뒤로 키워드 형태로 쓰임을 유념하자.

2. 샘플을 통한 개념 퀵뷰


부서별로 최소(FIRST) 커미션을 받는 직원 중 최소 급여와 최대(LAST) 커미션을 받는 직원 중 최대급여를 집계한다.
 
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
ORDER BY department_id;


3. 사용방법  



4. 함수 PARAMETER 설명

[OVER]

이 절을 지정하게 되면 분석용으로 사용된다라는 뜻이 되고, 생략하면 집계용으로 사용한다라는 뜻이 된다.

[query_partition_clause]

이 절은 OVER를 사용하게되면 지정하는 partion관련 절이다. 생략하게 되면 전체 테이블에 대한 분석을 하겠다는 의미가 된다.

[expr]

어느 컬럼기준으로 FIRST를 평가할 것인지에 대한 기준이 되는 컬럼이다.

[aggregate function]

집계함수인 MIN, MAX, SUM, AVG, COUNT, VARIANCE 또는 STDDEV 함수 중 하나를 적어 줄 수 있다. (집계합수를 전체를 FIRST혹은 LAST와 같이 쓸 수 있는 것이 아니다)

[KEEP]

KEEP은 aggregate function 뒤에 FIRST 혹은 LAST 펑션이 쓰겠다는 표현이다.

[DENSE_RANK]

DENSE_RANK로직으로 FIRST를 구하겠다는 의미다.
(DENSE_RANK의 순위 매김방법은 DENSE_RANK함수 설명을 참조) 

5. 다양한 샘플표현

example1) employees 테이블에서 department_id별 소속된 사원의 이름과 부서, 급여 그리고 부서내의 제일 낮은 커미션 중 제일 낮은 급여 및 제일 높은 커미션 중 제일 높은 급여를 조회. 

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;


Comments