Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 그룹 수준 필터링 기준을 적용하는 방법 – HAVING 절 완벽 가이드

SELECT 문에서 GROUP BY 절은 MySQL이 반환하는 결과 집합을 여러 개의 그룹으로 나누는 역할을 합니다. 그런데 전체 그룹이 아니라 특정 조건을 만족하는 일부 그룹만 조회하고 싶다면, 그룹 수준에서 필터링 기준을 적용해야 합니다. 이때 GROUP BY 절과 함께 HAVING 절을 사용하면 됩니다.

HAVING 절의 역할

WHERE 절이 개별 행(row) 단위로 조건을 거는 것과 달리, HAVING 절은 그룹화가 완료된 이후의 집계 결과(AVG, COUNT, SUM 등)를 대상으로 조건을 적용합니다. 따라서 "평균 급여가 55,000인 직급 그룹만 보고 싶다"와 같은 요구사항을 처리할 때 매우 유용합니다.

예제

예를 들어, 직원(employees) 테이블에서 평균 급여가 55,000인 그룹만 반환하고 싶다면 다음과 같이 HAVING 절에 필터링 조건을 작성합니다.

mysql> Select count(*),AVG(salary),Designation from employees GROUP BY designation having AVG(salary) = 55000;

+----------+-------------+-------------+
| count(*) | AVG(salary) | Designation |
+----------+-------------+-------------+
| 2 | 55000.0000 | Asst.Prof |
+----------+-------------+-------------+

1 row in set (0.00 sec)

실행 결과를 보면 전체 직급 중 평균 급여가 정확히 55,000인 'Asst.Prof' 그룹 하나만 반환된 것을 확인할 수 있습니다. 이처럼 HAVING 절을 활용하면 집계 함수의 결과를 기준으로 원하는 그룹만 손쉽게 필터링할 수 있습니다.

WHERE 절과 HAVING 절의 차이점

두 절의 차이를 정확히 이해하면 쿼리 작성이 훨씬 쉬워집니다. WHERE 절은 그룹화되기 의 개별 행을 필터링하고, HAVING 절은 그룹화된 의 집계 값을 필터링합니다. 참고로 MySQL에서는 HAVING 절에 별칭(alias)을 사용할 수도 있어, having avg_salary = 55000처럼 SELECT 절에서 정의한 별칭으로 조건을 작성하면 가독성을 높일 수 있습니다.