본문 바로가기

배우기/복습노트[oracle sql]

[복습] SQL | Oracle 서로 다른 행의 비교와 연산을 위한 함수 window function(lag, lead, sum, avg, min, max, count, rank) + 복습후기(20231113)

728x90
반응형

window function[WF]란 제목 그대로 서로 다른 행의 비교와 연산을 위해 만든 함수로, group by를 쓰지 않고 데이터 축약 없이 그룹 연산이 가능하다.

 

종류로는 lag, lead, sum, avg, min, max, count, rank가 있다.

 

우리가 보통 부서별 급여 총합을 나타내고자 할 때 아래와 같이 쿼리를 짰었다.

 

그런데 window function을 사용하면 아래와 같이 짤 수 있다.

 

부서별 최대급여자도 아래와 같이 나타낼 수 있다.

 

함수 문법은 다음과 같다.

 

 

성능도 함께 비교해보자.

emp에서 각 직원의 정보와 급여 총합을 함께 출력하고자 한다.

 

일단 group by 없이는 아래와 같은 쿼리는 에러가 나므로 쓸 수가 없다.

 

스칼라 서브쿼리를 사용한 경우 TABLE ACCESS FULL이 발생한다.

 

728x90

 

 

window function을 사용하니 버퍼도 1/4이 줄었고 index full scan을 하였다.

 

마지막 문제 한 개만 더 풀어보자

각 직원의 정보와 해당직원이 속한 부서의 평균 급여를 출력하고 부서 평균 급여보다 높은 급여를 받는 직원만 추출하여라.

 

 

복습 후기

내가 직접 짠 쿼리로 아직 성능이 개선된 것을 제대로 본 적이 없다.

앞으로 더 연습을 많이 해봐야겠지.....?!

일단 자야겠다.

728x90
반응형