Learning
레슨 2 / 8·15분

집계와 그룹화

집계 함수

집계 함수는 여러 행의 데이터를 하나의 결과로 요약합니다. COUNT, SUM, AVG, MIN, MAX가 대표적입니다.

sql
-- 기본 집계 함수
SELECT
    COUNT(*) AS 전체인원,
    AVG(salary) AS 평균급여,
    MIN(salary) AS 최소급여,
    MAX(salary) AS 최대급여,
    SUM(salary) AS 총급여합계
FROM employees;

GROUP BY와 HAVING

GROUP BY는 특정 열의 값이 같은 행들을 그룹으로 묶어 집계합니다. HAVING은 그룹화된 결과에 조건을 적용합니다. WHERE가 개별 행을 필터링한다면, HAVING은 그룹을 필터링합니다.

sql
-- 부서별 평균 급여
SELECT department,
       COUNT(*) AS 인원수,
       AVG(salary) AS 평균급여
FROM employees
GROUP BY department;

-- HAVING — 그룹 조건
SELECT department,
       AVG(salary) AS 평균급여
FROM employees
GROUP BY department
HAVING AVG(salary) >= 50000;  -- 평균급여 5만 이상 부서만

-- 복합 예제: 부서별 통계 (인원 3명 이상)
SELECT department,
       COUNT(*) AS 인원,
       ROUND(AVG(salary), 0) AS 평균급여,
       MAX(salary) - MIN(salary) AS 급여편차
FROM employees
WHERE hire_date >= '2020-01-01'
GROUP BY department
HAVING COUNT(*) >= 3
ORDER BY 평균급여 DESC;
  • COUNT(*) — 전체 행 수, COUNT(열) — NULL 제외 행 수
  • SUM(열) — 합계, AVG(열) — 평균
  • MIN(열) / MAX(열) — 최솟값 / 최댓값
  • GROUP BY — 그룹화, HAVING — 그룹 조건
  • ROUND(값, 자릿수) — 반올림
💡

SQL 실행 순서: FROMWHEREGROUP BYHAVINGSELECTORDER BYLIMIT. WHERE는 그룹화 전에, HAVING은 그룹화 후에 적용됩니다.