• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    해결됨

강사님 analytic 집계함수 에 대해서 궁금한게 있습니다.

23.06.13 20:40 작성 조회수 164

0

select empno, ename, deptno, sal, avg(sal) over (partition by deptno) dept_avg_sal
	, sal - avg(sal) over (partition by deptno) dept_avg_sal_diff
from hr.emp;
  • 위 SQL은 강사님이 작성해주신 코드 입니다.

with 
temp_01 as (
    select 
	 empno
	,ename
	,sal as "개인 급여"
	,avg(sal) over (partition by deptno) as "평균 급여"
    from emp
)
select empno,ename,"개인 급여","평균 급여",abs("평균 급여"-"개인 급여")
from temp_01;
  • 밑에는 제가 답안지를 안보고 먼저 작성한 코드 입니다.

 

제가 처음에 첫번째 코드처럼 작성을 하려다가

이게 group by 처럼 부하가 좀 큰 작업이라고 생각이되었습니다.

그래서 한번만 사용하고 싶어서 임시테이블을 만들고

그 테이블의 컬럼끼리 계산을 하게 했는데

 

  1. 윈도우 함수를 한번 더 사용하는것과 서브쿼리로 한번만 호출하는 것 중에서

윈도우 함수를 한번 더 호출하는게 더 나은 선택이라면

그 이유가 궁금합니다.

  1. 만약에 서브 쿼리를 사용하는데 그 서브 쿼리에 함수를 사용한 컬럼이 있다면

    그 컬럼을 호출할때마다 그 함수를 실행해서 그 결과를 가져오나요?

    아니면 한번 서브쿼리를 실행하면 그 데이터가 저장되서 값만 가져오나요?

 

답변 1

답변을 작성해보세요.

1

권 철민님의 프로필

권 철민

지식공유자

23.06.14 18:44

안녕하십니까,

서브쿼리를 with절 서브쿼리로 가정하고 말씀드리겠습니다.

강의에서 사용한 것과 같이 동일한 analytic 함수를 두번 사용한 SQL보다 With 절로 한번만 사용하는게 더 성능상 효율적입니다. with절로 사용하면 임시로 값이 만들어 지기 때문에 동일한 analytic 함수를 두번 반복할 필요가 없습니다.

제가 강의에서 사용한 SQL은 성능을 고려한 것이 아니라 강의 설명을 보다 쉽게 이해 시켜 드리기 위함입니다.

추가적으로 말씀 드리면 DBMS에 따라 동일한 레벨의 analytic 함수가 두번 반복해서 사용하면 한번만 사용하는 로직으로 자동 변환을 수행할 수도 있습니다.

감사합니다.

cjh님의 프로필

cjh

질문자

23.06.15 07:41

강사님 답변 감사합니다 !!