본문 바로가기
개발/오라클

오라클 AVG 심화 - AVG() OVER()

by 루 프란체 2018. 2. 18.

AVG() OVER()

※ 부서ID 를 기준으로 급여의 평균을 구해 같이 표시해준다.

기본 문법 : AVG(평균값을 구할 컬럼) OVER(PARTITION BY 기준이 될 컬럼)

 

SELECT  EMPLOYEE_ID
        , SALARY
        , DEPARTMENT_ID
        , AVG(SALARY) OVER(PARTITION BY DEPARTMENT_ID) AS DEPART_AVG_SALARY 
FROM 	EMPLOYEES 
WHERE   DEPARTMENT_ID IN (10,20,30);

 

※ 결과값 

EMPLYEE_ID SALARY DEPARTMENT_ID DEPART_AVG_SALARY
200 4400 10 4400
201 13000 20 9500
202 6000 20 9500
114 11000 30 4150
115 3100 30 4150
116 2900 30 4150
117 2800 30 4150
118 2600 30 4150
119 2500 30 4150

 

이 OVER() 함수로 감싸는 부분을 뭐라고 부르는지는 잘 모르겠지만 일반적인 AVG 함수를 컬럼에 나열하는 것보다 장점은 GROUP BY 를 하지 않아도 된다는 점이다.

 

만약 OVER() 를 사용하지 않고 다음과 같이 AVG(SALARY) 로만 값을 구하려고 한다면 다음과 같이 에러가 발생할 것이다.

 

SELECT	EMPLOYEE_ID
        , SALARY
        , DEPARTMENT_ID
        , AVG(SALARY) AS DEPART_AVG_SALARY 
FROM 	EMPLOYEES WHERE	DEPARTMENT_ID IN (10,20,30);  

error! 단일 그룹의 함수가 아닙니다.

 

이 OVER() 함수를 뭐라고 부르는지 아시는 분이 본 포스트를 보게 된다면 댓글로 좀 알려주세요~ 플리즈~ ^^

댓글