본문 바로가기

데이터베이스(DB)/Oracle
[Oracle] 순위 함수

//순위 함수

- ROWNUM의 사용을 여러 가지 용도로 구현해놓은 함수

- where절에 사용할 수 없다. > 사용하려면 서브쿼리를 사용해야 함.


 

// RANK() OVER()

- 정렬 후 ROWNUM을 붙일 수 있게 해주는 함수

- 순위 부여 시, 중복값이 발생하면 동일한 순위를 부여하고, 중복값의 개수만큼 건너뛴다.

rank() over(order by 컬럼명 [asc|desc]);

SELECT RANK() OVER (ORDER BY AGE) , ID, NAME, BIRTHDAY, PHONE, REGDATE, AGE FROM MEMBER;

select 
    name, buseo, basicpay,
    rank() over(order by basicpay desc)
from tblInsa;

// DENSE_RANK()

- 정렬 후 ROWNUM을 붙일 수 있게 해주는 함수

- 순위 부여 시, 중복값이 발생하면 동일한 순위를 부여하고, 그 뒤의 순위는 건너뛰지 않고 순차적으로 부여한다.


SELECT DENSE_RANK() OVER (ORDER BY AGE) , ID, NAME, BIRTHDAY, PHONE, REGDATE, AGE FROM MEMBER;

SELECT DENSE_RANK() OVER (ORDER BY HIT DESC) , WRITER_ID, TITLE, CONTENT, HIT FROM NOTICE;

select 
    name, buseo, basicpay,
    dense_rank() over(order by basicpay desc)
from tblInsa;

// ROW_NUMBER()

- 정렬 후 ROWNUM을 붙일 수 있게 해주는 함수

- 순위 부여 시, 중복값과 상관없이 순차적으로 부여한다.

- ROWNUM을 사용한 결과와 동일하다.

SELECT ROW_NUMBER() OVER (ORDER BY AGE) , ID, NAME, BIRTHDAY, PHONE, REGDATE, AGE FROM MEMBER;

select 
    name, buseo, basicpay,
    row_number() over(order by basicpay desc)
from tblInsa;

// PARTITION()

- 정렬할 때 GROUP BY 기능을 함.

SELECT DENSE_RANK() OVER (PARTITION BY WRITER_ID ORDER BY HIT DESC) 
, WRITER_ID, TITLE, CONTENT, HIT FROM NOTICE;

select
    buseo, name, basicpay,
    dense_rank() over(partition by buseo order by basicpay desc) as rnum
from tblInsa;

 

'데이터베이스(DB) > Oracle' 카테고리의 다른 글

[Oracle] 조인(JOIN)  (0) 2023.02.21
[Oracle] 서브 쿼리  (0) 2023.02.20
[Oracle] 집계 함수, Group by절, Having절  (0) 2023.02.20
[Oracle] NULL 관련 함수, DECODE 함수  (0) 2023.02.19
[Oracle] 변환 함수  (0) 2023.02.19