본문 바로가기
Work/DataBase

[SQLD] 윈도우함수 - 순위함수(rank, dense_rank, row_number)

윈도우함수 종류

순위(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 
;