2024.12.18(수) / 3일차 / GROUP_BY, HAVING
GROUP BY 절은 SQL 에서 데이터를 특정 기준으로 그룹화하여 집계연산을 수행할 때 사용하는 절이다.
회사 데이터, 쇼핑몰 데이터, 학교 데이터 등등 많은 데이터를 한 그룹으로 묶어서 표현하고 싶을 때 사용한다.
HAVING 절은 SQL 에서 그룹화된 데이터에 조건을 적용하여 필터링할때 사용하는 절이다.
GROUP BY 절과 함께 사용되며, 집계 함수 결과에 대한 조건을 지정하는데 유용하다.
이제 회사 데이터로 예시를 들어보겠다.
여러가지 테이블들이 나오는데, 여기서 본인이 묶고 싶은 그룹이 있을 것 이다.
나는 부서로 묶어보겠다.
GROUP BY 'department' 로 묶은 게 보이는데, 해당 코드를 해석하자면 다음과 같다.
employes 테이블에 있는 department 라는 그룹으로 부서를 반환하고, 평균값(급여) 을 avg_salary 로 칭하며 반환하겠다.
여기서 중요한점은 SQL 에서 코드는 실행순서가 존재한다.(다른 언어도 마찬가지긴 하다)
SQL 실행 순서
- FROM: 데이터 소스 읽기.
- WHERE: 조건으로 필터링 (선택적).
- GROUP BY: 그룹화.
- 집계 함수: 그룹화된 데이터에 집계 연산 수행.
- HAVING: 그룹화된 결과를 필터링 (선택적).
- SELECT: 결과 열 선택 및 반환.
- ORDER BY: 결과 정렬 (선택적).
중요하니 외워두면 좋다. 실행순서만 외워도 코드를 이해하는데 훨씬 큰 도움이 된다.
다음은 HAVING 절이다.
평균 급여가 5000 이상인 부서만 반환하고 싶다는 조건이 생길 경우, WHERE 절을 사용할지 HAVING 절을 사용할지
판단하면 된다. 방금 문제는 '부서' 만 반환하고 싶다는 '조건' 이 생겼기 때문에, GROUP BY 와 쓸 수 있는 HAVING 절을 사용하면 되겠다.
아까처럼 해석을 해보겠다. EMPLOYEES 테이블에서 department 라는 컬럼으로 그룹화 한다. 그룹화한 후 department 와
급여의 평균값을 반환하는데 이때 평균값은 5000 이상이다. 순서만 알아도 정말 쉽게 코드를 해석할 수 있다.
요약
1. GROUP BY 는 본인이 묶고 싶은 컬럼(오늘은 DEPARTMENT)을 기준으로 데이터를 그룹화 한다.
2. AVG(SALARY) 는 각 그룹에서 평균 급여를 계산한다.
3. HAVING 절을 사용하면 그룹화된 데이터에 조건을 추가하여 원하는 결과를 필터링 할 수 있다.