[오라클] 자주쓰는 분석 함수 정리
== 분석 함수 Analyticla Functions 정리 ==
일반 그룹 함수가 하나의 집단에 하나의 결과만 return 되는 것에 비해
여러 가지 기준을 적용해 여러 결과를 return 할 수 있다.
1. first_value() over() 그룹의 첫번째 값을 구한다.
예제)
select full_name 이름, money 연봉,
first_value( money ) over( order by money desc ) 최고연봉
from company;
select full_name 이름, money 연봉,
first_value( money ) over( order by money desc rows 2 preceding ) 최고연봉
from company; 2줄 위의 값까지 중 첫번째 값
select full_name 이름, money 연봉,
first_value( money ) over( order by money desc range 2000 preceding )
최고연봉
from company; 연봉 + 2000 까지 중 첫번째 값
2. last_value() over() 현재의 줄에만 적용한다. 범위를 지정을 사용해야 한다.
예제 )
select last_name 이름, money 연봉,
last_value( money ) over( order by money desc rows 3 preceding )
최저연봉
from company; 3줄 위의 값까지 중 마지막 값 - 결국 자기 자신
select last_name 이름, money 연봉,
last_value( money ) over( order by money desc rows between 2 preceding and 2 following ) 최저연봉
from company; 위 아래 각각 2줄 까지 중 마지막 값
3. count() over() 정렬에 따라 그룹의 누적 개수를 구한다.
예제)
select department_id, last_name, money, count(*) over( order by money desc )
from company where department_id=50;
4. sum() over() 정렬에 따라 그룹의 누적 합계를 구한다.
예제)
select department_id, last_name, money, sum(money) over( order by department_id asc ) from company;
select department_id, last_name, money, sum(money) over( partition by department_id order by department_id asc ) from company;
5. row_number() over() 그룹에서 Row번호를 구한다.
예제)
select department_id, last_name, money, row_number() over( partition by department_id order by money desc ) from company;
6. rank() over(), dense_rank() over()그룹의 순위를 구한다.
동일 순위일 경우 rank over는 1, 1, 3 으로
row_number over 는 1, 2, 3 으로
dense_rank over는 1, 1, 2 로 표현
예제)
select full_name, department_id 부서, money 연봉,
rank() over( partition by department_id order by money desc ) 부서연봉순위
from company;
'IT > Oracle' 카테고리의 다른 글
[오라클] 조인에 대한 이해 - 2 (0) | 2018.01.17 |
---|---|
[오라클] 조인에 대한 이해 - 1 (0) | 2018.01.16 |
[오라클] 테이블 스페이스(TABLESPACE)의 이해 (0) | 2018.01.12 |
[오라클] 계층형 쿼리의 정리 (0) | 2018.01.11 |
데이터 베이스 스키마 설계 (0) | 2018.01.10 |