본문 바로가기
컴소니/DB

[오라클 DBMS 공부] GROUP BY와 HAVING 절

by 금소니 2020. 8. 27.
반응형

#111

절이라는 용어를 많이 쓰다보니 영어공부하면서 배웠던 구와 절이 생각나네요

 

절은 주어+동사, 구는 주어+동사가 아닌 두 개의 단어로 구성된 품사.......

 

1. GROUP BY

데이터를 처리하다보면 공통된 그룹으로 묶을 일이 많이 있습니다.

집계함수를 이용하여 처리하는 것들도 있지만 데이터를 분류하여 처리하는 경우가 있는데요.

이 때 GROUP BY를 사용하며, 특정 컬럼 단위로 그룹을 묶을 수 있습니다.

EX) DEPARTMENT_ID로 분류

EMPLOYEES 테이블에는 NULL을 포함하여 총 12개의 부서가 있으며, GROUP BY를 통하여 이 부서를 분류할 수 있었습니다.

 

이 때 주의하실 점은 SELECT에서 조회하는 컬럼입니다.

GROUP BY를 통하여 분류할 컬럼 혹은 집계함수를 사용해야만 데이터를 출력하실 수 있습니다.

EX) 주의하지 않을 경우

집계함수를 사용해서는 다음과 같이 사용할 수 있습니다.

EX) COUNT, 부서별 사원 수

그리고 또 GROUP BY의 경우 꼭 하나의 컬럼만 올 수 있는 것이 아니라 여러 개의 컬럼이 올 수 있습니다.

EX) 부서별, 매니저별 사원수

2. HAVING 절

HAVING 절은 GROUP BY와 함께 사용되며, 집계 함수를 이용한 조건을 기술할 때 사용합니다.

GROUP BY로 그룹을 묶었는데 이 그룹에 대하여 무언가 조건을 주고 싶다 할 때 사용하신다고 보시면 됩니다.

문법은 WHERE 절과 동일합니다.

EX) 부서별 사원 수가 5명 이상인 부서

이렇게 HAVING을 통하여 집계함수 조건을 사용할 수 있습니다.

 

그리고 참고하실 점은 HAVING 절은 GROUP BY 이전, 이후 어디든 사용하실 수 있으며, 동일한 결과를 얻으실 수 있습니다.

 

3. ROLLUP

추가적으로 ROLLUP에 대해서 알아보도록 하겠습니다.

ROLLUP의 경우 데이터 통계를 낼 때 소계라고 보시면 됩니다.

GROUP BY를 통하여 그루핑한 결과별 합계 정보를 보실 수 있습니다.

EX) 부서별, 매니저별 사원의 연봉 소계

빨간색으로 표시한 부분이 각 부서에 매니저별로 분류한 사원들의 연봉을 더한 총 값입니다.

여기서 NULL은 ROLLUP을 통해 소계를 낸 기준 값이므로 NULL을 대체하는 함수를 사용하여 변경하시면 알아보기 수월하실 수 있습니다.

 

ROLLUP을 사용하지 않았을 때와 비교해보도록 하겠습니다.

    ROLLUP을 사용하지 않았을때                                                                     ROLLUP을 사용하였을때

차이가 느껴지시나요? 왼쪽한 한번에 합계를 냈었다면 오른쪽은 좀 더 세세하게 합계를 냈습니다.

통계를 내실 때 유용하게 사용하실 수 있습니다.

반응형

댓글