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 라고 생각하면 이해하기가 좀 더 쉬울 것 같다.
반응형
'데이타베이스' 카테고리의 다른 글
[MySQL] ERROR 1045 (28000): 에러 (0) | 2015.07.22 |
---|---|
오라클의 소스코드에 특정 문자열 검색하기 (0) | 2013.04.17 |
주간, 월간 근무가능 일 수 구하기 (0) | 2013.03.27 |
오라클 날짜 정보 가지고 놀기 (0) | 2013.03.27 |
오라클의 주의 시작일 변경여부 확인 (0) | 2013.03.26 |