Oracle SQL 강좌
집계함수(Aggregate function)란? 15 11 99,999+

by 김정식 COUNT MAX MIN AVG SUM 그룹함수 집계함수 HAVING GROUP BY [2002.01.20]


집계 함수란 여러행 또는 테이블 전체 행으로부터 하나의 결과값을 반환하는 함수이다.

집계함수(Aggregate function)의 이해

  • - GROUP BY절을 이용하여 그룹 당 하나의 결과로 그룹화 할 수 있다.
  • - HAVING절을 사용하여 집계함수를 이용한 조건 비교를 할 수 있다.
  • - MIN, MAX 함수는 모든 자료형에 사용 할 수 있다.
  • - 일반적으로 가장 많이 사용하는 집계함수에는AVG(평균), COUNT(개수), MAX(최대값), MIN(최소값), SUM(합계) 등이 있다.

COUNT

COUNT 함수는 검색된 행의 수를 반환 한다.

-- 검색된 행의 총 수 4개를 반환. 즉 4개의 부서가 존재한다.
SELECT COUNT(deptno) FROM dept;

COUNT(DEPTNO)
-------------
            4

MAX

MAX 함수는 컬럼값 중에서 최대값을 반환 한다.

-- sal 컬럼값 중에서 제일 큰값을 반환. 즉 가장 큰 급여를 반환.
SELECT MAX(sal) salary FROM emp;

SALARY
-------
  5000   

MIN

MIN 함수는 컬럼값 중에서 최소값을 반환 한다.

-- sal 컬럼값 중에서 가장 작은 값 반환. 즉 가장 적은 급여를 반환
SELECT MIN(sal) salary FROM emp;

 SALARY
-------
    800    

AVG

AVG 함수는 평균 값을 반환 한다.

-- 부서번호 30의 사원 평균 급여를 소수점 1자리 이하에서 반올림
SELECT ROUND(AVG(sal),1) salary 
  FROM emp 
 WHERE deptno = 30;

 SALARY
 ------
 1566.7

SUM

SUM 함수는 검색된 컬럼의 합을 반환 한다.

-- 부서번호 30의 사원 급여 합계를 조회.
SELECT SUM(sal) salary 
  FROM emp 
 WHERE deptno = 30;

 SALARY
-------
   9400    

STDDEV

STDDEV 함수는 표준편차를 반환 한다.

-- 부서번호 30의 사원 급여 표준편차를 반환.    
SELECT ROUND(STDDEV(sal),3) salary 
  FROM  emp 
 WHERE deptno = 30;

  SALARY
--------
 668.331  

집계함수 예

아래는 부서별 사원수, 최대급여, 최소급여, 급여합계, 평균급여를 급여합게 순으로 조회하는 예이다.

SELECT deptno 부서번호, COUNT(*) 사원수, 
       MAX(sal) 최대급여, MIN(sal) 최소급여, 
       SUM(sal) 급여합계, ROUND(AVG(sal)) 평균급여
  FROM emp
 GROUP BY deptno
 ORDER BY SUM(sal) DESC;


부서번호   사원수  최대급여  최소급여   급여합계   평균급여
------- -------- --------- -------- --------- ---------
     20       5      3000       800    10875     2175
     30       6      2850       950     9400     1567
     10       3      5000      1300     8750     2917

- 강좌 URL : http://www.gurubee.net/lecture/1031

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 나그네 [2005.03.07 11:19:38]
CCOUNT(DEPTNO) -> COUNT(DEPTNO)

by 김정식 [2005.03.16 10:07:55]
오타 수정했습니다. ^^

by smile [2005.11.09 20:17:36]
퍼갑니다. ^^

by oracle [2006.06.15 16:23:05]
인자 막 공부하는 학생인데여 그룹 함수가 이게 다 인가요..
책에서는 더 많은 함수가 있는게 책에서 이해하기가 어려워서여 ;;;
쉽게 설명 되어 있는 곳은 업나요

by 조현진 [2007.04.05 11:49:11]
굼굼한게 있는데요
SELECT SUM(sal) salary FROM emp WHERE deptno = d.deptno
사원에 급여의 합 인가여??
이렇케 해보니까 d.deptno 가 틀렸다고 뜨는데요
어떻케 해야될지 몰라서 글을 올려요

by 이현석 [2007.04.05 13:29:48]
조현진님의 쿼리에는 몇가지 문제가 있습니다.
1.일단 WHERE deptno = d.deptno 이부분은 필요가 없는 부분입니다.
조인을 걸거나, 조건을 입력할때 사용하셔야 하는데 님께서 사용하신 방법은 어떤 테이블과 조인을 거는 형식인데 조인 걸 대상테이블이 안적혀 있습니다.아마도 emp와 dept 테이블 조인 거는 것을 가져오시다가 dept 테이블 부분을 빼먹은 것 같습니다.
단순히 님께서 말씀하신 급여의 합을 구하기 위해서는 SELECT SUM(sal) salary FROM emp 여기까지만 쓰시면 됩니다.

2. 현재 올리신 쿼리에서는 생략가능하지만, 일반적으로 그룹함수를 사용하실려면 group by문을 쓰셔야 합니다.요 위에 있는 강좌에서도 group by문을 생략하였는데, 그 이유는 저런것에는 생략이 가능하기 때문입니다.
일반적으로는 group by를 써주시는게 좋습니다.

by TEI [2007.12.13 15:11:26]
COUNT로 COLUMN수를 구하는 방법은 없습니까?

by 양지훈 [2008.02.19 09:37:27]
SELECT COUNT(COLUMN_NAME)
FROM ALL_COL_COMMENTS
WHERE TABLE_NAME = 'EMP' 이런방법으로도 컬럼수를 알수 있습니다.

by 양한마리 [2010.02.03 10:25:24]
좋은 강좌 감사합니다. ^ ^

by 까망소 [2012.12.21 11:18:37]

강의 잘 읽었습니다.
STDDEV '표준편차' 는 유용하겠습니다. 흐흐~

by 박군 [2013.12.27 09:33:20]

참고로 COUNT(*) 는 NULL이 개수에 포함되고
COUNT(MGR)은 NULL이 비포함됩니다..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입