데이타베이스
오라클 over() 함수
hs_seo
2013. 4. 17. 17:55
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 라고 생각하면 이해하기가 좀 더 쉬울 것 같다.
반응형