sqld

집계함수와 group by절

자격증원톱 2026. 2. 23. 13:22
반응형

집계함수와 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은 그룹 필터
반응형