윈도우함수 종류
순위(RANK) 관련 | RANK, DENSE_RANK, ROW_NUMBER | 대부분 지원 |
순서 관련 함수 | FIRST_VALUE, LAST_VALUE, LAG, LEAD | ORACLE 만 지원 |
그룹 내 비율 관련 함수 | CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT | PERCENT_RANK 함수는 ANSI/ISO SQL 표준과 Oracle DBMS에서 지원하고 있으며, NTILE 함수는 ANSI/ISO SQL 표준에는 없지만, Oracle, SQL Server에서 지원하고 있다. RATIO_TO_REPORT 함수는 Oracle에서만 지원되는 함수(현업에서 유용). |
비율함수의 결과값은 모두 0 - 1의 범위를 가지며, 값의 총합은 1이됩니다.
실행을 통해 설명하겠습니다.
-- test1 ddl
create table test1(
col1 varchar(10),
col2 varchar(10)
);
insert into test1 values('0',null);
insert into test1 values('b','2');
insert into test1 values('c','3');
insert into test1 values('d','3');
insert into test1 values('e','5');
commit;
select * from test1;
현재 test1에 6개의 값을 넣었습니다. 그중 3이 중복됩니다.
1. Ratio_to_report
전체 SUM(컬럼) 값에 대한 행별 컬럼 값의 백분율을 소수점으로 구할 수 있다.
반드시 Numeric컬럼을 지정해줘야하며, Sum에 대한 값의 비중을 나타내므로 값이 큰행이 큰 결과치를 가진다.
select col2
,round(ratio_to_report(col2) over(),2) as ratio_to_report는_값의비율
from test1
order by col2 desc
;
2. Percent_rank
기준컬럼이 String,numeric 모두 가능하며, 정렬된 순위에 대한 비율 값을 반환한다.
select col2
,percent_rank() over(order by col2) as percent_rank는_정렬된값의위치
from test1
order by col2
;
3. NTILE
기준컬럼이 가지는 값의 범위를 N등분하여 해당행이 어떤분면에 위치하는지 정수로 반환해줌
select col2
,ntile(4) over(order by col2) as ntile는_n등분위치
from test1
order by col2
4. CUME_DIST
계산 대상 값의 그룹(PARTITION BY에 의해 나누어진 그룹) 별로 각 로우를 ORDER BY 절에 명시된 순서대로 정렬한 뒤,
값의 순위에 대한 상대적인 누적 분포도(Cumulative Distribution)를 반환,
select col2
,cume_dist() over(order by col2) as cume_dist는_기준상에위치백분율
from test1
order by col2
;
이 함수는 나온값의 순서가 중요하다, 순서에 따라 누적분포도값이 달라지므로 주의가 필요
'Work > DataBase' 카테고리의 다른 글
[SQLD] 그룹함수 - CUBE 예문, 총정리 (0) | 2020.07.02 |
---|---|
[SQLD] 그룹함수 - ROLLUP 예문, 총정리, 사용시 주의사항 (0) | 2020.07.02 |
[SQLD] 윈도우함수 - 순위함수(rank, dense_rank, row_number) (0) | 2020.06.28 |
[SQLD] 계층형 질의와 셀프조인 (0) | 2020.05.31 |
[SQLD] 조인원리 NL join, Sort-Merge join, Hash Join (0) | 2020.05.29 |