작성
·
255
0
저는 주로 group by 할때 아래처럼 select 에 들어가는 칼럼을 몽땅 넣는데
select b.dname, a.empno, a.ename, round(avg(c.sal), 2)
group by b.dname, a.empno, a.ename
선생님처럼 max 같은 집계함수로 처리하는거랑 어떤 차이가 있나요??
답변 1
0
큰 차이는 없습니다.
제가 아래와 같이 max(a.ename)을 사용한 이유는 group by 절에 사용되지 않은 컬럼을 select절에 출력하기 위해서는 aggregation을 적용해야 한다는 것을 보여드리기 위해서 사용한 것입니다.
select b.dname, a.empno, max(a.ename)
from emp
group by b.dname, a.empno
적어 주신대로 group by b.dname, a.empno, a.ename와 같이 group by 절에 ename이 기술되면 select절에 굳이 max(ename)을 사용할 필요가 없습니다.
다만 이렇게 사용하실때 유의하실 사항이 있습니다. select 절에 해당 컬럼을 사용하기 위해서 불필요하게 group by 컬럼이 추가된 것인지 점검해 봐야 합니다. group by b.dname, a.empno, a.ename은 empno 레벨로 uniq하므로 a.ename이 group by에 추가되어도 별 문제가 없습니다만, 이와 같지 않은 경우에 group by 레벨이 변할 수 있으므로 유의해야 합니다.
또 굳이 따지자면 대용량 데이터의 경우 group by 레벨이 하나 더 있으므로 수행시각이 쪼오금~ 더 걸릴 수 있습니다.
감사합니다.