728x90

MSSQL GROUP BY와 HAVING 절의 차이점과 사용법 – 집계 쿼리 실무 가이드
GROUP BY와 HAVING은 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
'Database > MSSQL' 카테고리의 다른 글
| MSSQL 윈도우 함수(OVER, RANK 등) 사용 예제 (0) | 2025.05.24 |
|---|---|
| MSSQL 서브쿼리(Subquery)와 CTE(Common Table Expression) 활용 (0) | 2025.05.23 |
| MSSQL INSERT, UPDATE, DELETE 문 사용법 (0) | 2025.05.21 |
| MSSQL SELECT 문 기본 사용법과 WHERE 절 활용 (0) | 2025.05.20 |
| MSSQL 테이블 간 관계 설정과 조인(Join) 활용법 (0) | 2025.05.19 |