대덕인재/Oracle

[Oracle D-10] 집계 함수

꼬마버거 2025. 4. 14. 11:32

📌 📊 집계 함수란?

여러 데이터 값을 요약해주는 함수
👉 한 줄 요약: "많은 데이터를 요약해서 대표값으로 보여주는 함수"

 

 

 

집계함수는 집계함수를 포함할수 없다.

 

✅ 자주 쓰는 집계 함수 5종 세트

함수명 역할 예시 결과
SUM() 합계 총 매출, 총 수량
AVG() 평균 평균 나이, 평균 급여
COUNT() 개수 전체 회원 수, 주문 건수
MAX() 최댓값 최고 점수, 최고 가격
MIN() 최솟값 최저 점수, 최저 기온

✅ 기본 형식

SELECT 집계함수(컬럼명)
FROM 테이블명;

 

✅ 예제로 보는 집계 함수

1. SUM() – 합계 

SELECT SUM(SALARY) AS 총급여
FROM EMPLOYEES;

👉 EMPLOYEES 테이블에서 모든 직원의 급여 총합


2. AVG() – 평균 

SELECT AVG(SALARY) AS 평균급여
FROM EMPLOYEES;

👉 급여 평균


3. COUNT() – 개수 

SELECT COUNT(*) AS 총사원수
FROM EMPLOYEES;

👉 전체 행(사람) 수

SELECT COUNT(DEPARTMENT_ID)
FROM EMPLOYEES;

👉 DEPARTMENT_ID가 NULL이 아닌 행만 카운트됨!


4. MAX() – 최댓값 

SELECT MAX(SALARY) AS 최고급여
FROM EMPLOYEES;

5. MIN() – 최솟값

SELECT MIN(SALARY) AS 최저급여
FROM EMPLOYEES;

 


✅ 조건이 있는 집계: WHERE와 함께 쓰기 

SELECT AVG(SALARY)
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 50;

👉 부서 50번의 급여 평균


✅ 그룹별 집계: GROUP BY 

SELECT DEPARTMENT_ID, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;

👉 부서별 평균 급여


✅ 조건 필터링: HAVING 

SELECT DEPARTMENT_ID, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING AVG(SALARY) > 3000;

👉 평균 급여가 3000 이상인 부서만 보여줌


🧾실무예제)

 

🧾 1. [직원 급여 요약] – SUM, AVG, MAX, MIN 

SELECT 
  SUM(SALARY) AS 총급여,
  AVG(SALARY) AS 평균급여,
  MAX(SALARY) AS 최고급여,
  MIN(SALARY) AS 최저급여
FROM EMPLOYEES;

✅ 회사 인사팀에서 급여통계를 구할 때 사용해요.

 

🛍️ 2. [고객별 주문 총액] – GROUP BY + SUM() 

SELECT 
  CUSTOMER_ID, 
  SUM(ORDER_AMOUNT) AS 총주문금액
FROM ORDERS
GROUP BY CUSTOMER_ID;

✅ 고객별로 얼마치 주문했는지 계산할 때 사용함.

 

 

🧮 3. [부서별 인원수] – GROUP BY + COUNT() 

SELECT 
  DEPARTMENT_ID, 
  COUNT(*) AS 인원수
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;

✅ 부서마다 몇 명이 있는지 확인할 때 사용.

 

 

📅 4. [월별 매출 요약] – TO_CHAR + GROUP BY 

SELECT 
  TO_CHAR(ORDER_DATE, 'YYYY-MM') AS 월,
  SUM(ORDER_AMOUNT) AS 총매출
FROM ORDERS
GROUP BY TO_CHAR(ORDER_DATE, 'YYYY-MM')
ORDER BY 월;

✅ 월별로 매출 보고서 만들 때 진짜 자주 씀!

 

🔎 5. [조건부 평균 구하기] – WHERE 

SELECT 
  AVG(SALARY) AS 평균급여
FROM EMPLOYEES
WHERE JOB_ID = 'SA_REP';

✅ **영업직(SA_REP)**의 평균 급여 구할 때.

 

🔝 6. [상위 고객 5명 구하기] – ORDER BY + ROWNUM

SELECT * 
FROM (
  SELECT CUSTOMER_ID, SUM(ORDER_AMOUNT) AS 총금액
  FROM ORDERS
  GROUP BY CUSTOMER_ID
  ORDER BY 총금액 DESC
)
WHERE ROWNUM <= 5;

✅ VIP 고객 TOP 5 구할 때 정말 많이 써요.

 

✅ 7. [재고가 10개 이상인 상품의 총 개수] – HAVING

SELECT 
  CATEGORY, 
  COUNT(*) AS 상품수
FROM PRODUCTS
GROUP BY CATEGORY
HAVING COUNT(*) >= 10;

✅ 특정 카테고리에서 상품 수가 일정 기준 이상인 것만 필터링.

 

 

💡 실무 팁

상황 사용하는 함수/구문
통계 요약 SUM, AVG, MAX, MIN
개수 세기 COUNT()
조건 필터링 WHERE, HAVING
카테고리별 분석 GROUP BY
순위 ROWNUM, RANK() 또는 ROW_NUMBER() (윈도우 함수)