SQL GROUP BY / HAVING - 그룹단위 결과출력

이번에는 그룹 단위로 결과를 출력하기 위해 그룹 단위로 묶어주는 GROUP BY절에 대해 포스팅하겠습니다

 

GROUP BY

GROUP BY 절은 반드시 그룹 함수( COUNT, MAX, MIN, AVG, SUM,... )들과 함께 쓰인다

GROUP BY절이 그룹 함수들의 연산에 기준이 됩니다

 

말이 좀 어려운데 예를 하나 들어보자면

1부터 10까지 10개의 회사마다 사원들의 총합 급여를 알고 싶은 겁니다

각 회사마다 사원들이 있고 각 회사마다 사원들의 급여를 다 더하면

각 회사의 총합 급여가 되는데 사원들의 급여를 더할 때 회사를 기준으로 묶어서 각각 더하면 되겠죠

이때 회사를 기준으로 묶어주는 것을 GROUP BY절이 해줍니다

 

NAME COMPANY SALARY
철수 A 500
영희 A 450
정훈 B 400
현우 C 430
정우 B 300
우현 C 340
현준 A 240
남호 B 500
지호 C 340

 위와 같은 테이블에서 회사마다 직원들의 급여 합계를 구해보겠습니다

SELECT COMPANY, SUM(SALARY)
  FROM TABLE
 GROUP BY COMPANY

회사를 기준으로 ( COMPANY 칼럼의 값이 같은 애들끼리 )

묶어서 그 묶어진 ROW들의 SALARY합을 조회하는 쿼리입니다.

COMPANY SUM(SALARY)
A 1190
B 1200
C 1110

이렇게 회사기준으로 SALARY의 합이 출력이 되었습니다


HAVING

위처럼 그룹별로 묶어서 출력했는데 SALARY의 합이 1200 이상인 회사만 보고 싶다

이럴 때 쓰는 게 HAVING 절입니다

WHERE 절을 쓰면 안 돼? 하실 수 있는데 WHERE 절은 GROUP BY 절보다 먼저 처리됩니다

묶어서 처리한 결과 중에서 WHERE절에 해당하는 ROW만 출력하는 게 아니라는 거죠

HAVING 절은 WHERE절과 똑같지만 GROUP BY절 이후에 처리가 되기에 HAVING 절을 사용하시면 됩니다

 

SELECT COMPANY, SUM(SALARY)
  FROM TABLE
 GROUP BY COMPANY
HAVING SUM(SALARY) >= 1200
COMPANY SUM(SALARY)
B 1200

 

집계나 통계 등에 많이 사용이 됩니다

유용하게 사용하시기 바랍니다~