본문 바로가기
카테고리 없음

[SQL] 2. 집계함수(COUNT,SUM,AVG,MIN,MAX), GROUP BY, HAVING

by 우공80 2025. 5. 19.
728x90

[SQL] 집계함수(COUNT,SUM,AVG,MIN,MAX), GROUP BY, HAVING

1. 집계 함수(Aggregate Functions)

여러 행의 값을 한 줄로 요약할 때 사용합니다.

함수설명예시
COUNT(expr) 행 개수 COUNT(*)
SUM(expr) 합계 SUM(SALARY)
AVG(expr) 평균 AVG(SALARY)
MIN(expr) 최솟값 MIN(HIREDATE)
MAX(expr) 최댓값 MAX(SALARY)
-- 직원 수 조회
SELECT COUNT(*) AS 직원수 
FROM EMPLOYEES; 

-- 전체 연봉 합계·평균·최댓값·최솟값 
SELECT SUM(SALARY) AS 총연봉,
	   AVG(SALARY) AS 평균연봉, 
       MAX(SALARY) AS 최고연봉, 
       MIN(SALARY) AS 최저연봉 
FROM EMPLOYEES;
 
 

2. GROUP BY

특정 컬럼별로 그룹을 나눈 뒤, 그 그룹 단위로 집계할 때 사용합니다.

SELECT DEPARTMENT_ID,
	COUNT(*) AS 직원수,
    AVG(SALARY) AS 평균연봉 
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
 
  • GROUP BY 뒤에 나열한 컬럼별로 묶음 생성
  • SELECT 절에 있는 비집계 컬럼은 모두 GROUP BY에 포함돼야 함

3. HAVING

GROUP BY 결과에 조건을 걸고 싶을 때 사용합니다.
(WHERE는 그룹화 이전에만 조건 적용 가능)

-- 직원 수 5명 이상인 부서만 조회 
SELECT DEPARTMENT_ID, 
		COUNT(*) AS 직원수, 
        AVG(SALARY) AS 평균연봉 
FROM EMPLOYEES 
GROUP BY DEPARTMENT_ID 
HAVING COUNT(*) >= 5;
 
 

 


4. 연습 문제

  1. EMPLOYEES 테이블에서 부서별최고·최저 연봉을 조회해 보세요.
  2. EMPLOYEES 테이블에서 지역(LOCATIONS.CITY) 별 직원 수를 조회하세요.
    (힌트: EMPLOYEES → DEPARTMENTS → LOCATIONS 순으로 조인 후 GROUP BY)
  3. 부서별 평균 연봉이 3000 이상인 부서만 조회해 보세요.
728x90

댓글