Dev JS Blog

[Oracle] row_number() over() 활용 본문

옛날 창고/SQL

[Oracle] row_number() over() 활용

Dev JS 2018. 12. 21. 11:04
728x90

row_number() over() 활용





row_number() over() 를 활용하는법을 몇가지 알아보겠습니다.


일단 기본적으로 row_number() over() 를 쓰는 이유는 

정렬과 더불어 rownum 까지 주는 효과를 가집니다.



저희가 갖고놀아볼 테이블을 알아보겠습니다.


SELECT

num,

word,

country

FROM ex_table


결과)



이런 테이블이 있습니다.


이때 row_number() over() 을 추가 해준다면 


SELECT

row_number() over(order by num asc) as order_no,

num,

word,

country

FROM ex_table


결과)



order num asc 오름차순이면서 rownum 까지 들어가게 됩니다.


이게 가장 기본적인 사용법입니다.


그리고 추가적으로 알아두면 좋은 방법 한가지

partition by 입니다.

partition by 는 지정한 컬럼에서 동일한 데이터들끼리 묶어서 넘버링을 하는데요.

무슨 말인지 확인해봅시다.


일단 country 를 partition by 하겠습니다.


SELECT

row_number() over(partition by country order by num asc) as order_no,

num,

    word,

    country

FROM ex_table


결과)



order_no 가 12 123 이런식으로 표현되었습니다.

country 컬럼을 partition by 하면서 동일한 데이터 들에 대한 각각 넘버링이 주어지게 됩니다.


partition by는 한컬럼만 가능한게 아닙니다.

partition by country, num order by num asc


이런식으로 여러 컬럼을 지정해도 됩니다.


728x90

'옛날 창고 > SQL' 카테고리의 다른 글

[Oracle] lead(), lag()는 뭐지?  (0) 2018.12.26
[SQL] JOIN 에 대해서  (0) 2018.12.23
[Oracle] order by 기초  (0) 2018.12.20
[MySQL] with rollup 기능  (0) 2018.06.27
[MySql] 두 날짜 일 수 차이 구하기  (0) 2018.05.14
Comments