요약
SQL HAVING은 GROUP BY로 그룹화된 결과에 조건을 적용할 때 사용하는 SQL 문법입니다. 많은 초보자가 WHERE와 HAVING을 헷갈리지만 적용 시점과 목적이 다릅니다. SQLD 시험에서도 자주 출제되는 핵심 개념이므로 정확하게 이해하는 것이 중요합니다.
SQL HAVING이란?
SQL HAVING은 GROUP BY를 통해 그룹화된 결과에 조건을 적용하는 SQL 문법입니다.
데이터를 조회할 때는 WHERE를 사용하지만, 그룹화된 결과를 필터링할 때는 SQL HAVING을 사용해야 합니다.
예를 들어 부서별 직원 수를 계산한 후 직원 수가 5명 이상인 부서만 조회하고 싶다면 SQL HAVING을 사용해야 합니다.
SQL HAVING은 집계 함수와 함께 사용되는 경우가 많으며 SQLD 시험에서도 중요한 출제 영역입니다. 더 많은 정보를 확인하고 SQL HAVING 개념을 익혀보세요.
SQL HAVING이 필요한 이유
다음과 같은 직원 데이터가 있다고 가정해보겠습니다.
| 이름 | 부서번호 |
|---|---|
| SMITH | 10 |
| ALLEN | 10 |
| WARD | 20 |
| JONES | 20 |
| KING | 20 |
부서별 직원 수를 계산하면 다음과 같습니다.
| 부서번호 | 직원수 |
|---|---|
| 10 | 2 |
| 20 | 3 |
여기서 직원 수가 3명 이상인 부서만 조회하고 싶다면 SQL HAVING을 사용해야 합니다.
SQL HAVING은 그룹화 이후에 조건을 적용하기 때문에 집계 결과를 필터링할 수 있습니다. 더 많은 정보를 확인하고 SQL 처리 순서를 이해해보세요.
SQL HAVING 기본 문법
SQL HAVING 기본 문법은 다음과 같습니다.
SELECT 컬럼명,
집계함수
FROM 테이블명
GROUP BY 컬럼명
HAVING 조건식;
예제
SELECT DEPTNO,
COUNT(*)
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) >= 3;
위 SQL HAVING은 직원 수가 3명 이상인 부서만 조회합니다.
SQL HAVING은 반드시 GROUP BY와 함께 사용하는 경우가 대부분입니다. 더 많은 정보를 확인하고 SQL HAVING 문법을 익혀보세요.
WHERE와 HAVING 차이점
SQLD 시험에서 가장 많이 출제되는 부분입니다.
많은 수험생이 SQL HAVING과 WHERE를 혼동합니다.
| 구분 | WHERE | HAVING |
|---|---|---|
| 적용 시점 | 그룹화 전 | 그룹화 후 |
| 집계 함수 사용 | 불가능 | 가능 |
| 필터 대상 | 개별 행(Row) | 그룹(Group) |
| SQLD 출제 빈도 | 매우 높음 | 매우 높음 |
예를 들어 급여가 2000 이상인 직원을 조회하려면 WHERE를 사용합니다.
SELECT *
FROM EMP
WHERE SAL >= 2000;
반면 부서별 평균 급여가 2000 이상인 부서를 조회하려면 SQL HAVING을 사용해야 합니다.
SELECT DEPTNO,
AVG(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) >= 2000;
더 많은 정보를 확인하고 SQL HAVING과 WHERE 차이를 이해해보세요.
COUNT 함수와 HAVING 사용하기
가장 자주 사용하는 SQL HAVING 예제입니다.
SELECT DEPTNO,
COUNT(*)
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) >= 5;
결과 예시
| 부서번호 | 직원수 |
|---|---|
| 20 | 5 |
| 30 | 6 |
SQL HAVING은 집계 결과를 조건으로 사용할 수 있다는 점이 핵심입니다.
더 많은 정보를 확인하고 SQL HAVING 활용법을 익혀보세요.
SUM 함수와 HAVING 사용하기
부서별 급여 합계가 일정 금액 이상인 경우를 조회할 수 있습니다.
SELECT DEPTNO,
SUM(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING SUM(SAL) >= 10000;
결과 예시
| 부서번호 | 급여합계 |
|---|---|
| 20 | 10875 |
SQL HAVING은 매출 분석, 생산량 분석, 재고 분석에서도 자주 사용됩니다.
더 많은 정보를 확인하고 데이터 분석 SQL을 학습해보세요.
AVG 함수와 HAVING 사용하기
평균값 조건도 자주 출제됩니다.
SELECT DEPTNO,
AVG(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) >= 2500;
결과 예시
| 부서번호 | 평균급여 |
|---|---|
| 10 | 2916 |
SQL HAVING은 집계 함수와 함께 사용될 때 진가를 발휘합니다.
더 많은 정보를 확인하고 SQL 집계 분석 능력을 향상시켜보세요.
SQL HAVING 처리 순서
SQLD 시험에서는 SQL 실행 순서를 묻는 문제도 자주 출제됩니다.
실제 처리 순서는 다음과 같습니다.
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
예를 들어 SQL HAVING은 GROUP BY 이후에 실행됩니다.
이 순서를 이해하면 SQLD 문제 풀이가 훨씬 쉬워집니다.
더 많은 정보를 확인하고 SQL 실행 순서를 정리해보세요.
SQL HAVING 사용 시 자주 하는 실수
초보자가 SQL HAVING을 사용할 때 자주 하는 실수는 다음과 같습니다.
집계 함수를 WHERE에 작성
잘못된 예시
SELECT DEPTNO,
COUNT(*)
FROM EMP
WHERE COUNT(*) >= 3
GROUP BY DEPTNO;
위 SQL은 오류가 발생합니다.
올바른 SQL은 다음과 같습니다.
SELECT DEPTNO,
COUNT(*)
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) >= 3;
SQL HAVING은 집계 함수 조건에 사용해야 합니다.
더 많은 정보를 확인하고 SQL 오류를 예방해보세요.
SQL HAVING과 ORDER BY 함께 사용하기
실무에서는 SQL HAVING과 ORDER BY를 함께 사용하는 경우가 많습니다.
SELECT DEPTNO,
COUNT(*) AS CNT
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) >= 3
ORDER BY CNT DESC;
위 SQL은 직원 수가 많은 순서대로 정렬합니다.
실제 데이터 분석 업무에서도 매우 자주 사용되는 패턴입니다.
더 많은 정보를 확인하고 SQL 실무 활용법을 익혀보세요.
SQLD 시험에서 HAVING이 중요한 이유
SQLD 시험에서는 SQL HAVING 관련 문제가 꾸준히 출제됩니다.
특히 다음 개념은 반드시 이해해야 합니다.
| 출제 포인트 | 중요도 |
|---|---|
| HAVING 개념 | 매우 높음 |
| WHERE와 차이 | 매우 높음 |
| COUNT + HAVING | 매우 높음 |
| SUM + HAVING | 높음 |
| AVG + HAVING | 높음 |
| SQL 실행 순서 | 매우 높음 |
실제 SQLD 기출문제를 보면 SQL HAVING 관련 문제가 거의 매회 등장합니다.
더 많은 정보를 확인하고 SQLD 핵심 개념을 학습해보세요.
자주 묻는 질문(FAQ)
SQL HAVING 없이 GROUP BY만 사용할 수 있나요?
네 가능합니다. SQL HAVING은 그룹화된 결과에 추가 조건이 필요할 때만 사용합니다. 더 많은 정보를 확인하고 GROUP BY 활용법을 익혀보세요.
SQL HAVING에서 집계 함수를 꼭 사용해야 하나요?
대부분 집계 함수와 함께 사용하지만 상황에 따라 그룹 컬럼 조건도 사용할 수 있습니다. 더 많은 정보를 확인하고 SQL 활용 범위를 넓혀보세요.
SQLD 시험에서 HAVING 문제가 많이 나오나요?
네. WHERE와 HAVING 차이 문제는 SQLD 단골 출제 유형입니다. 더 많은 정보를 확인하고 SQLD 기출문제를 분석해보세요.
마무리
SQL HAVING은 GROUP BY 결과에 조건을 적용하기 위한 핵심 SQL 문법입니다. 특히 WHERE와의 차이점, 집계 함수 사용법, SQL 실행 순서는 SQLD 시험에서 반드시 이해해야 하는 개념입니다. SQL HAVING을 충분히 연습하면 데이터 분석과 실무 SQL 작성 능력을 크게 향상시킬 수 있습니다. 더 많은 정보를 확인하고 다음 단계인 SQL 서브쿼리 사용법도 함께 학습해보세요.
