윈도우함수 종류
순위(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에서만 지원되는 함수(현업에서 유용). |
랭크함수() + over()
rank - 같은값은 같은순위 이후 동일수만큼 뒤에 랭크를 반환 (1등 ,2등 ,2등 ,2등, 5등)
dense_rank, - 같은 값은 같은순위, 순위는 반드시 하나씩 올라감 (1등 ,2등 ,2등 ,2등, 3등)
row_number - 같은값이라도 유일순위를 반환 (1등 ,2등 ,3등 ,4등, 5등)
- rank() over (order by 기준)
select CUST_NM 이름
,(select cd_nm from c_cmn_dtl_cd where cmn_cd ='SEX_CD' and SEX_CD=CMN_DTL_CD) 성별
,AGE 나이
,AGES_DIV_CD 연령대
,REST_PNT_AMT as 잔여포인트
,rank() over (order by REST_PNT_AMT desc) 포인트순위
from c_Cust_base
;
-- rank() over + 그룹화
select (select cd_nm from c_cmn_dtl_cd where cmn_cd ='SEX_CD' and SEX_CD=CMN_DTL_CD) 성별
,AGES_DIV_CD 연령대
,REST_PNT_AMT as 잔여포인트
,rank() over (order by REST_PNT_AMT desc) 포인트순위
,rank() over (partition by AGES_DIV_CD order by REST_PNT_AMT desc) 연령별포인트순위_동위가능
from c_Cust_base
;
-- dense_rank() over 동위인정
select (select cd_nm from c_cmn_dtl_cd where cmn_cd ='SEX_CD' and SEX_CD=CMN_DTL_CD) 성별
,AGES_DIV_CD 연령대
,REST_PNT_AMT as 잔여포인트
,dense_rank() over (order by REST_PNT_AMT desc) 포인트순위_동위가능
from c_Cust_base
;
-- row_number() over 고유순위 지정
select (select cd_nm from c_cmn_dtl_cd where cmn_cd ='SEX_CD' and SEX_CD=CMN_DTL_CD) 성별
,AGES_DIV_CD 연령대
,REST_PNT_AMT as 잔여포인트
,row_number() over (order by REST_PNT_AMT desc) 포인트순위_동위가능
from c_Cust_base
;
'Work > DataBase' 카테고리의 다른 글
[SQLD] 그룹함수 - ROLLUP 예문, 총정리, 사용시 주의사항 (0) | 2020.07.02 |
---|---|
[SQLD] 윈도우함수 - 비율함수 (ratio_to_report, percent_rank, cume_dist, ntile) (0) | 2020.06.28 |
[SQLD] 계층형 질의와 셀프조인 (0) | 2020.05.31 |
[SQLD] 조인원리 NL join, Sort-Merge join, Hash Join (0) | 2020.05.29 |
[SQLD] 윈도우 함수, 범위 지정 (0) | 2020.05.29 |