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() 함수를 뭐라고 부르는지 아시는 분이 본 포스트를 보게 된다면 댓글로 좀 알려주세요~ 플리즈~ ^^
'개발 > 오라클' 카테고리의 다른 글
오라클 - 조인(JOIN)의 종류 (0) | 2018.02.20 |
---|---|
오라클 - DDL, DML, DCL (0) | 2018.02.20 |
오라클 RANK 심화 - RANK() WITHIN GROUP(), RANK() OVER(), ROW_NUMBER() OVER(), DENSE_RANK() (0) | 2018.02.18 |
많이 쓰이는 오라클 함수 (0) | 2018.02.18 |
댓글