반응형
집계함수와 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은 그룹 필터
반응형
'sqld' 카테고리의 다른 글
| 서브쿼리 (0) | 2026.02.24 |
|---|---|
| JOIN 이해하기 (0) | 2026.02.23 |
| SELECT와 WHERE절 (0) | 2026.02.23 |
| SQL 함수에 대해 알아봅시다! (0) | 2026.02.23 |
| SELECT 문 (0) | 2026.02.23 |