본문 바로가기
오라클

[오라클] COUNT / SUM / AVG 집계 함수 완벽 정리

by devlog93 2025. 12. 26.

집계 함수란?

집계 함수(Aggregate Funtion)여러 행(row)을 하나의 값으로 계산하는 함수다. 주로 GROUP BY와 함께 사용하며 데이터를 요약하거나 통계를 낼 때 사용한다. 이제 COUNT, SUM, AVG에 대해 알아보자...!

 

1. COUNT 함수

◆ COUNT 기본 문법

COUNT(*)
COUNT(컬럼명)

◆ COUNT(*) VS COUNT(컬럼) 차이

구분 설명
COUNT(*) NULL 포함, 행 개수
COUNT(컬럼) NULL 제외, 값 있는 행만

 

예제 테이블 ( EMP )

EMP_ID SALARY
1 3000
2 NULL
3 2000

 

COUNT 예제

SELECT COUNT(*)
  FROM EMP;         -- 결과:   3
  
SELECT COUNT(SALARY)
  FROM EMP          -- 결과:   2

◆ 조건별 COUNT ( CASE WHEN 활용 )

SELECT COUNT(CASE WHEN STATUS = 'Y' THEN 1 END) AS USE_CNT
  FROM USER_INFO;

☞ 특정 조건에 해당하는 개수 계산

 

2. SUM 함수

◆ SUM 기본 문법

SUM(컬럼명)
  • 숫자형 컬럼만 가능
  • NULL 값은 자동 제외

SUM 기본 예제

SELECT SUM(SALARY) AS TOTAL_SALARY
  FROM EMP;

NULL은 합계에서 제외됨

◆ 조건부 SUM

SELECT SUM(CASE WHEN GENDER = 'M' THEN SALARY ELSE 0 END) AS MALE_SALARY
  FROM EMP;

 

3. AVG 함수

◆ AVG 기본 문법

AVG(컬럼명)
  • SUM / COUNT 기반 계산
  • NULL 값 자동 제외

AVG 예제

SELECT AVG(SALARY) AS AVG_SALARY
  FROM EMP;

 

★ AVG 주의 사항 ( SALARY가 NULL인 행은 평균 계산에서 제외 )

AVG(SALARY)

 

★ NULL 포함 평균 구하기

SELECT AVG(NVL(SALARY, 0)) AS AVG_SALARY
  FROM EMP;

 

4. GROUP BY + 집계 함수

SELECT DEPT_ID
     , AVG(SALARY) AS AVG_SALARY
  FROM EMP
 GROUP BY DEPT_ID;

 

5. COUNT / SUM / AVG 실무 패턴

상태별 사용자 수

SELECT STATUS
    , COUNT(*) AS CNT
 FROM USER_INFO
GROUP BY STATUS;

 

월별 매출 합계

SELECT TO_CHAR(SALE_DATE, 'YYYY-MM') AS YM
     , SUM(PRICE) AS TOTAL_PRICE
  FROM SALES
 GROUP BY TO_CHAR(SALE_DATE, 'YYYY-MM');

 

평균 점수 이상만 조회

SELECT DEPT_ID
     , AVG(SCORE) AS AVG_SCORE
  FROM STUDENT
 GROUP BY DEPT_ID
HAVING AVG(SCORE) >= 80;

 

6. COUNT / SUM / AVG 사용 시 주의 사항

  • 집계 함수는 GROUP BY 제외
  • NULL 자동 제외 ( COUNT(*)는 제외)
  • SELECT 일반 컬럼 ㅡ> GROUP BY 필수
  • 조건은 WHERE / 집계 조건은 HAVING

마무리

이번 글에서는 오라클에서 많이 사용되는 집계 함수인 COUNT, SUM, AVG에 대해 알아보고, GROUP BY와 함께 사용하는 방법, 그리고 사용 시 주의 사항, 단순히 데이터를 조회하는 것을 넘어 데이터를 묶고 집계를 하는 방법을 알아보았습니다. 이번 내용을 기반으로 매출 통계, 사용자 수 집계, 평균 값 계산 등등 실무에서 자주 사용하는 것 같습니다. 다음에는 그룹별 집계 값을 계산하는 PARTITION BY(분석 함수)도 한번 정리해 보겠습니다. 감사합니다. (_ _)