이번에는 그룹 단위로 결과를 출력하기 위해 그룹 단위로 묶어주는 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 |
집계나 통계 등에 많이 사용이 됩니다
유용하게 사용하시기 바랍니다~