본문 바로가기
데이타베이스

오라클 over() 함수

by hs_seo 2013. 4. 17.

over 함수는 group by, order by 를 이용한 서브쿼리의 사용을 편리하게 하기 위해 사용하는 함수이다. 

보통 over 함수는 단독으로 사용하기 보다는

count(), max(), min(), sum(), avg(), rank(), row_number() 등과 같은 분석 함수와 함께 사용된다. 


-- OVER 함수 이용
SELECT
    NAME, 
    NO, 
    SUM(NO) over(PARTITION BY NAME ORDER BY NAME)
FROM (
SELECT 'A' AS NAME, '31' AS NO FROM dual UNION
SELECT 'B', '32' FROM dual UNION
SELECT 'B', '45' FROM dual UNION
SELECT 'D', '95' FROM dual UNION
SELECT 'D', '41' FROM dual UNION
SELECT 'D', '15' FROM dual)

/*
-- 결과
1	A	31	31
2	B	32	77
3	B	45	77
4	D	15	151
5	D	41	151
6	D	95	151
*/
-- GROUP BY 이용
SELECT
    NAME, 
    NO,
    sum(NO)
FROM (
SELECT 'A' AS NAME, '31' AS NO FROM dual UNION
SELECT 'B', '32' FROM dual UNION
SELECT 'B', '45' FROM dual UNION
SELECT 'D', '95' FROM dual UNION
SELECT 'D', '41' FROM dual UNION
SELECT 'D', '15' FROM dual)
GROUP BY NAME, NO
ORDER BY NAME

/*
-- 결과
   	NAME	NO	SUM(NO)
1	A	31	31
2	B	32	32
3	B	45	45
4	D	15	15
5	D	41	41
6	D	95	95
*/


위와같이 Name에 따른 No의 합을 구하려면 group by 를 이용하면 위와 같이 사용하면 안되고 서브쿼리를 이용하여 처리를 해야 한다. 

따라서 코드가 복잡해지고, 유지보수에 어려움이 생기게 될 것이다. 


이럴때 등장하는 것이 over() 함수 인 것이다. 

* partition by 는 group by 라고 생각하면 이해하기가 좀 더 쉬울 것 같다. 


반응형