본문 바로가기

DataBase/Oracle

[Oracle] 조회 순번 매기기 - ROWNUM, ROW_NUMBER()

 

 

ROWNUM

  • SELECT 해온 데이터에 일련번호를 매기며, 무조건 1번부터 차례대로 붙여진다.
  • 특정 집합에서 원하는 만큼의 행만 가져오고 싶을 때 활용할 수 있다.
  • 순서가 결정 된 후 ORDER BY로 정렬되므로 ROUNUM과 ORDER BY를 함께 사용하면 순서가 뒤섞일 수 있다.
    원하는 결과를 얻기 위해선, 서브 쿼리 결과(ORDER BY)에 ROWNUM을 매겨야 한다.

예시

SELECT * FROM TABLE WHERE ROUNUM <=3           -- TOP3의 데이터 추출
SELECT ROUNUM, NAME FROM TABLE WHERE AGE >= 20 -- 20살 이상인 사람의 데이터를 ROUNUM을 붙여 추출

SELECT ROWNUM, T1.*
FROM ( SELECT *
       FROM TABLE
       ORDER BT AGE) T1 
-- 나이순으로 ROWNUM을 붙여서 데이터 추출

 

 

ROW_NUMBER()

ROW_NUMBER() OVER(PARTITION BY 그룹핑할 컬럼 (선택)  ORDER BY 정렬할 컬럼(필수))
  • 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 일련번호가 매겨진다.
  • 그룹별(PARTITION)로 순번을 따로 부여할 수 있기 때문에,  ORDER BY 된 결과에 순번을 매길 때에는 ROWNUM 보다 ROW_NUMBER() 함수가 더 편하다.

예시

SELECT ROU_NUMBER OVER(ORDER BY AGE, BIRTH), T1.* FROM TABLE T1 WHERE AGE >= 20 
-- 20살 이상의 사람 데이터를 AGE, BIRTH순서대로 ROW값을 붙여 추출

SELECT ROU_NUMBER OVER(PARTITION BY BIRTH ORDER BY AGE, BIRTH), NAME, AGE FROM TABLE WHERE AGE >= 20 
-- 20살 이상의 사람 데이터를 AGE, BIRTH순서대로추출 후 BIRTH마다 ROW를 붙여 추출

SELECT T2.*
FROM ( SELECT ROU_NUMBER OVER(PARTITION BY GENDER ORDER BY AGE DESC) ROWNUM, T1.*
       FROM TABLE T1) T2
WHERE T2.ROWNUM = 1
-- 성별마다 나이가 가장 많은 사람의 데이터 추출

 

 

 

 


https://gent.tistory.com/170

 

[Oracle] 오라클 조회 순번 매기는 방법 ( ROWNUM, ROW_NUMBER() )

1. ROWNUM 키워드 이용하는 방법 - 조회된 순서되로 순번을 매긴다. SELECT ROWNUM , a.* FROM emp a - ORDER BY 를 사용하면 순번이 뒤섞이므로 정렬된 서브쿼리 결과에 ROWNUM 을 매겨야 한다. SELECT ROWNUM , x.* FRO

gent.tistory.com

https://turing0809.tistory.com/48

 

ROWNUM 이해하기

1. ROWNUM 이란? ROWNUM은 SELECT 해온 데이터에 일련번호를 붙이는 것이다. 테이블이나, 특정 집합에서 원하는 만큼의 행만 가져오고 싶을 때, 행의 개수를 제한하는 용도로 사용한다. 예) 전체 행에서

turing0809.tistory.com

https://tychejin.tistory.com/201

 

[Oracle] ROW_NUMBER 함수

ROW_NUMBER 함수란? - 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 고유한 값을 반환하는 함수입니다. - 윈도우 함수(Window Funtion)로 그룹 내 순위 함수입니다. 문법ROW_NUMBER() OVER(PARTITION

tychejin.tistory.com