본문 바로가기
Database/MSSQL

MSSQL GROUP BY와 HAVING 절의 차이점과 사용법

by yazasus 2025. 5. 22.
728x90

MSSQL GROUP BY와 HAVING 절의 차이점과 사용법 – 집계 쿼리 실무 가이드

GROUP BYHAVING은 SQL에서 데이터를 그룹별로 묶고, 조건을 걸어 필터링할 때 사용되는 절입니다.
기능은 비슷해 보이지만 적용 시점과 대상이 달라 정확한 이해가 필요합니다.

1. GROUP BY란?

GROUP BY는 특정 열을 기준으로 데이터를 그룹화하고, 각 그룹에 대해 SUM, COUNT, AVG 같은 집계 함수를 적용할 수 있게 해줍니다.


SELECT UserId, COUNT(*) AS OrderCount
FROM Orders
GROUP BY UserId;

→ 사용자별 주문 개수를 구하는 예시입니다.

2. HAVING이란?

HAVING은 GROUP BY로 집계된 결과에 조건을 걸 때 사용합니다.
즉, 집계 이후 결과에 조건을 적용하는 데 사용되며, WHERE와는 다릅니다.


SELECT UserId, COUNT(*) AS OrderCount
FROM Orders
GROUP BY UserId
HAVING COUNT(*) >= 3;

→ 주문이 3건 이상인 사용자만 필터링

3. WHERE vs HAVING

  • WHERE: 집계 이전 개별 행을 필터링
  • HAVING: 집계 이후 그룹을 필터링

-- WHERE 사용 예: 특정 상품만 대상
SELECT ProductId, COUNT(*) AS SaleCount
FROM OrderItems
WHERE ProductId IN (1, 2, 3)
GROUP BY ProductId;

-- HAVING 사용 예: 10개 이상 팔린 상품만
SELECT ProductId, COUNT(*) AS SaleCount
FROM OrderItems
GROUP BY ProductId
HAVING COUNT(*) >= 10;

4. 다중 집계 조건 활용 예


SELECT UserId,
       COUNT(*) AS OrderCount,
       SUM(TotalAmount) AS TotalSpent
FROM Orders
GROUP BY UserId
HAVING COUNT(*) >= 5 AND SUM(TotalAmount) > 50000;

→ 주문이 5건 이상이며 총 결제 금액이 5만 원 초과인 사용자만 조회

5. 실무 팁 💡

  • WHERE 절에서는 집계 함수(COUNT, SUM 등)를 사용할 수 없습니다. 반드시 HAVING에서만 사용하세요.
  • GROUP BY에 지정한 컬럼 외의 컬럼은 SELECT 절에 단독으로 포함할 수 없습니다.
  • 인덱스가 잘 설정된 컬럼을 기준으로 GROUP BY 하면 성능이 향상될 수 있습니다.

마무리

GROUP BY는 데이터를 요약하고, HAVING은 요약된 결과에서 조건을 걸어 필터링하는 역할을 합니다.
두 절의 차이를 명확히 이해하면, 복잡한 통계 쿼리도 안정적으로 작성할 수 있습니다.
집계 쿼리는 실무에서 자주 사용되므로, 다양한 조건과 결합하는 연습이 필요합니다.

728x90