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

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

by 루 프란체 2018. 2. 18.

※ 부서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() 함수를 뭐라고 부르는지 아시는 분이 본 포스트를 보게 된다면 댓글로 좀 알려주세요~ 플리즈~ ^^

댓글0