mun dev

[Oracle] OVER()와 PARTITION BY 사용하기 본문

DB/Oracle

[Oracle] OVER()와 PARTITION BY 사용하기

mndev 2024. 1. 29. 10:08

OVER() 함수

 GROUP BY, ORDER BY를 이용한 서브쿼리를 개선하기 위해 나온 함수

 

- group by없이 집계함수(sum, count, ..) 를 사용하는 것은 큰 이점이다.

- group by 사용에 따르는 제한적인 부분이나(사용 컬럼 수와 그룹화 시킬 수의 일치.. 등)

- 복잡한 서브쿼리를 자제할 수 있기 때문에 해당 구문을 사용한다.

 

PARTITION BY() 함수

OVER()함수와 사용했을 때, Group By의 역할을 수행하는 함수

 

- GROUP BY 없이 OVER()를 통해 집계 함수를 사용하는 건 분명 큰 장점이지만, 대부분 집계 함수는 GROUP BY와 많이 사용하게 된다.

- 때문에, 해당 함수를 통해 특정 컬럼을 묶어주고 내가 필요한 집계 함수를 사용하고자 할 때, 해당 표현을 사용한다.

 

 

사용예시

SELECT DEPARTMENT_NAME, LOCATION_ID, COUNT(LOCATION_ID) OVER(PARTITION BY LOCATION_ID) NUM
FROM DEPARTMENTS

 

이런 식으로 쿼리를 작성했을 때, 

 

회사 이름, 지역코드, 해당 지역코드가 몇 군데인지 출력할 수 있다.