Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL Server

SQL Server HAVING 절 완벽 가이드 – 문법부터 SUM·COUNT·MIN·MAX 실전 예제까지

SQL Server HAVING 절이란?

HAVING 절은 SQL Server(Transact-SQL)에서 GROUP BY 절과 함께 사용되어, 지정한 조건이 TRUE로 평가되는 그룹만 결과 집합에 포함시키는 역할을 합니다. 즉, 그룹화된 데이터에 조건을 적용하여 원하는 그룹만 필터링할 때 사용됩니다.

일반적인 WHERE 절은 개별 행(row)에 조건을 적용하지만, HAVING 절은 집계 함수(SUM, COUNT 등)의 결과에 조건을 적용한다는 점이 핵심 차이입니다.

HAVING 절 기본 문법

SELECT bieuthuc1, bieuthuc2, ... bieuthuc_n,
ham_tong(bieuthuc)
FROM bang
[WHERE dieukien]
GROUP BY bieuthuc1, bieuthuc2, ... bieuthuc_n
HAVING dieukien_having;

문법 구성 요소 설명

ham_tong (집계 함수)

SUM, COUNT, MIN, MAX, AVG와 같은 집계 함수를 의미합니다.

bieuthuc1, bieuthuc2, ... bieuthuc_n (표현식)

집계 함수에 포함되지 않는 표현식으로, 반드시 GROUP BY 절에 명시되어야 합니다.

WHERE dieukien

선택 사항입니다. 레코드가 선택되기 위해 충족해야 하는 조건을 지정합니다.

HAVING dieukien_having

집계 결과에만 적용되는 추가 조건으로, 반환되는 행 그룹을 제한합니다. 조건이 TRUE로 평가되는 그룹만 최종 결과 집합에 포함됩니다.

실전 예제로 배우는 HAVING 절

1. SUM 함수 사용 예제

SELECT bophan, SUM(soluong) AS 'Tong so luong'
FROM sanpham
GROUP BY bophan
HAVING SUM(soluong) > 100;

위 예제는 SUM 함수를 사용하여 부서 이름과 해당 부서의 총 수량을 반환합니다. HAVING 절이 결과를 필터링하여 총 수량이 100보다 큰 부서만 조회됩니다.

2. COUNT 함수 사용 예제

SELECT thanhpho, COUNT(*) AS 'So nhanvien'
FROM nhanvien
WHERE bang = 'California'
GROUP BY thanhpho
HAVING COUNT(*) > 20;

이 예제는 캘리포니아 주에 소속된 직원들을 도시별로 그룹화하여 직원 수를 반환합니다. HAVING 절 덕분에 직원 수가 20명을 초과하는 도시만 결과에 나타납니다. 여기서 WHERE 절은 행을 먼저 걸러내고, HAVING 절은 그룹화된 결과를 다시 필터링하는 두 단계 구조임을 확인할 수 있습니다.

3. MIN 함수 사용 예제

SELECT bophan, MIN(luong) AS 'Luong thap nhat'
FROM nhanvien
GROUP BY bophan
HAVING MIN(luong) >= 50000;

이 예제는 각 부서의 이름과 해당 부서의 최저 급여를 반환합니다. HAVING 절은 최저 급여가 $50,000 이상인 부서만 조회하도록 제한합니다.

4. MAX 함수 사용 예제

SELECT ho, MAX(luong) AS 'Luong cao nhat'
FROM nhanvien
GROUP BY ho
HAVING MAX(luong) > 34000;

마지막 예제는 성(last name)별로 직원을 그룹화하여 각 성씨 그룹 내 최고 급여를 반환합니다. HAVING 절은 최고 급여가 $34,000보다 큰 그룹만 결과에 포함시킵니다.

정리: WHERE vs HAVING

두 절의 차이를 한눈에 정리하면 다음과 같습니다.

  • WHERE: 그룹화 전에 개별 행을 필터링하며, 집계 함수를 사용할 수 없습니다.
  • HAVING: GROUP BY로 그룹화된 후 집계 결과에 조건을 적용하며, 집계 함수 사용이 가능합니다.

HAVING 절을 잘 활용하면 복잡한 그룹 단위 분석 쿼리를 효율적으로 작성할 수 있습니다. GROUP BY와 함께 실무에서 자주 사용되므로 위 예제들을 직접 실행해 보며 익혀두는 것을 추천합니다.