FIRST
구문
aggregate_function
KEEP
(DENSE_RANK FIRST ORDER BY
expr [ DESC | ASC ]
[ NULLS { FIRST | LAST } ]
[, expr [ DESC | ASC ]
[ NULLS { FIRST | LAST } ]
]...
)
[ OVER ( [query_partition_clause] ) ]
참고:
ORDER BY 절과 OVER 절의 구문, 의미, 그리고 제약 조건에 대한 정보는 "Analytic Functions"에 대한 내용을 참조하세요.
목적
FIRST와 LAST는 매우 유사한 함수입니다. 둘 다 주어진 정렬 기준에 따라 FIRST 또는 LAST로 랭크되는 일련의 행들의 값을 대상으로 하는 집계 함수와 분석 함수입니다. FIRST 또는 LAST로 랭크되는 행이 하나만 있는 경우, 집계는 하나의 요소를 가진 집합에서 작동합니다.
OVER 절을 생략하면 FIRST와 LAST 함수는 집계 함수로 처리됩니다. 이 함수들을 분석 함수로 사용하려면 OVER 절을 지정해야 합니다. query_partition_clause는 이 함수들과 함께 사용할 수 있는 OVER 절의 유일한 부분입니다. OVER 절을 포함하지만 query_partition_clause를 생략하면 함수는 분석 함수로 처리되지만, 분석을 위해 정의된 창은 전체 테이블입니다.
이 함수들은 숫자 데이터 유형이나 숫자 데이터 유형으로 암시적으로 변환될 수 있는 비숫자 데이터 유형을 인수로 받습니다. 함수는 인수의 숫자 데이터 유형과 동일한 데이터 유형을 반환합니다.
FIRST와 LAST 함수는 정렬된 그룹에서 첫 번째 또는 마지막 행의 값을 필요로 할 때, 그러나 필요한 값이 정렬 키가 아닐 경우, 자체 조인이나 뷰의 필요성을 제거하고 더 나은 성능을 제공합니다.
- aggregate_function 인수는 MIN, MAX, SUM, AVG, COUNT, VARIANCE 또는 STDDEV 함수 중 하나입니다. 이 함수는 FIRST 또는 LAST로 랭크되는 행들의 값을 대상으로 작동합니다. FIRST 또는 LAST로 랭크되는 행이 하나만 있는 경우, 집계는 단일 (비집계) 집합에서 작동합니다.
- KEEP 키워드는 의미적으로 명확성을 제공합니다. aggregate_function에 대해 FIRST 또는 LAST 값만 반환되도록 지정합니다.
- DENSE_RANK FIRST 또는 DENSE_RANK LAST는 Oracle 데이터베이스가 최소 (FIRST) 또는 최대 (LAST) dense rank (또는 olympic rank)를 가진 행들에 대해서만 집계하도록 나타냅니다.
참고:
LAST와 암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하십시오.
집계 예제
다음 예제는 샘플 테이블 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
ORDER 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 12008
110 8300 12008
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;
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 12008
Higgins 110 12008 8300 12008
Grant 7000 7000 7000
출처: 오라클 레퍼런스
원문 링크: Oracle FIRST 함수 문서
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] FLOOR - 소수점 이하 절사 (0) | 2023.08.06 |
---|---|
[오라클 레퍼런스 함수] FIRST_VALUE - 정렬된 집합에서 첫 번째 값 반환 (0) | 2023.08.05 |
[오라클 레퍼런스 함수] FEATURE_VALUE - 특징 값 반환 (0) | 2023.08.05 |
[오라클 레퍼런스 함수] FEATURE_SET - 특징 ID와 특징 값의 집합(set) 반환 (0) | 2023.08.05 |
[오라클 레퍼런스 함수] FEATURE_ID - 최고 값 특성의 식별자 반환 (0) | 2023.08.05 |
댓글