728x90
![[SQL] 집계함수(COUNT,SUM,AVG,MIN,MAX), GROUP BY, HAVING](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
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. 연습 문제
- EMPLOYEES 테이블에서 부서별로 최고·최저 연봉을 조회해 보세요.
- EMPLOYEES 테이블에서 지역(LOCATIONS.CITY) 별 직원 수를 조회하세요.
(힌트: EMPLOYEES → DEPARTMENTS → LOCATIONS 순으로 조인 후 GROUP BY) - 부서별 평균 연봉이 3000 이상인 부서만 조회해 보세요.
728x90
댓글