집계함수와 group by절
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 23일837
집계함수와 group by절
1) 집계함수(다중행 함수)란?
- 여러 행을 모아서 결과 1개를 만드는 함수입니다.
- 대표: SUM, AVG, COUNT, MAX, MIN
✅ 예시(EMP 전체 통계)
SELECT
SUM(SAL) AS total_salary,
AVG(SAL) AS avg_salary,
COUNT(*) AS employee_count,
MAX(SAL) AS max_salary,
MIN(SAL) AS min_salary
FROM EMP;
2) GROUP BY 절이란?
- 집계함수를 “전체”가 아니라 그룹별로 계산하게 해줍니다.
✅ 예시(부서별 평균 급여)
SELECT
DEPTNO,
AVG(SAL) AS avg_sal
FROM EMP
GROUP BY DEPTNO;
핵심 규칙
- SELECT에 **그룹 기준 컬럼(DEPTNO)**을 쓰면, 그 컬럼은 GROUP BY에도 있어야 합니다.
- 그룹 기준을 여러 개도 가능(예: 부서+직무)
✅ 예시(부서+직무별 급여 합계)
SELECT
DEPTNO,
JOB,
SUM(SAL) AS sum_sal
FROM EMP
GROUP BY DEPTNO, JOB;
3) HAVING 절이란?
- GROUP BY로 만들어진 **“그룹 결과”**를 다시 조건으로 걸러낼 때 씁니다.
- 주로 AVG(SAL), COUNT(*) 같은 집계 결과 조건에 사용합니다.
✅ 예시(평균 급여가 2000 초과인 부서만)
SELECT
DEPTNO,
AVG(SAL) AS avg_sal
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) > 2000;
4) WHERE vs HAVING 차이
- WHERE: 그룹핑 전에 개별 행을 먼저 필터링
- HAVING: 그룹핑 후 그룹 결과를 필터링
예시 1) “급여 1500 초과 직원만 모아서 부서 평균”
SELECT DEPTNO, AVG(SAL) AS avg_sal
FROM EMP
WHERE SAL > 1500
GROUP BY DEPTNO;
→ 먼저 SAL>1500인 “행”만 남기고, 그 남은 행으로 평균을 냄
예시 2) “부서 평균 급여가 2000 초과인 부서”
SELECT DEPTNO, AVG(SAL) AS avg_sal
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL) > 2000;
→ 부서별 평균을 만든 다음, 평균>2000인 “부서 그룹”만 남김
✅ 결론 한 줄
- 행을 거르는 건 WHERE, 그룹을 거르는 건 HAVING
5) ORDER BY 절이란?
- 결과를 정렬합니다.
- ASC(오름차순, 기본), DESC(내림차순)
✅ 예시(급여 내림차순)
SELECT ENAME, SAL
FROM EMP
ORDER BY SAL DESC;
✅ 예시(부서 오름차순, 같은 부서 안에서는 급여 내림차순)
SELECT ENAME, SAL, DEPTNO
FROM EMP
ORDER BY DEPTNO ASC, SAL DESC;
6) ALIAS(별칭) 사용 주의점(이미지 포인트)
- SQL 실행 순서 때문에 보통
- GROUP BY에서는 SELECT에서 만든 별칭을 바로 못 쓰는 경우가 많고
- ORDER BY에서는 별칭 사용이 가능한 경우가 많습니다.
✅ 안전한 습관
- GROUP BY는 원래 컬럼명으로 쓰고,
- ORDER BY는 별칭을 써도 됨.
초간단 정리
- 집계함수: 여러 행 → 1개 결과(SUM/AVG/COUNT/MAX/MIN)
- GROUP BY: “부서별/직무별”처럼 그룹별 집계
- HAVING: 그룹 결과에 조건(AVG>2000 같은 것)
- ORDER BY: 정렬(ASC/DESC)
- WHERE는 행 필터, HAVING은 그룹 필터
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!