단일 행 함수와는 달리 그룹 함수는 여러 행 또는 테이블 전체에 대해 함수가 적용되어 하나의 결과를 가져오는 함수를 말한다.
그룹 당 하나의 결과가 주어지도록 행의 집합에 대해 연산할 경우 GROUP BY 절을 이용하여 그룹화 할 수 있고 HAVING을 이용하여 그룹에 대한 조건을 제한할 수 있다.
<그룹함수의 종류>
AVG(DISTINCT|ALL|n) : NULL값을 제외한 n개 행의 평균값.
COUNT(DISTINCT|ALL|*) : NULL값을 포함한 행의 개수.
MAX(DISTINCT|ALL|expr) : 최대값.
MIN(DISTINCT|ALL|expr) : 최소값.
STDDEV(DISTINCT|ALL|n) : NULL값을 제외한 n의 표준 편차.
SUM(DISTINCT|ALL|n) : NULL값을 제외한 n의 합계.
VARIANCE(DISTINCT|ALL|n) : NULL값을 제외한 n의 분산.
* DISTINCT는 해당 함수로 하여금 오직 중복되지 않는 값만 리턴하게 해준다.
그러나 ALL(Default)은 해당 함수로 하여금 모든 값을 고려하게 한다.
* expr이 있는 인수들의 자료 형태는 CHAR, VARCHAR2, NUMBER, DATE형이 될 수 있다.
* COUNT(*)를 제외한 모든 그룹 함수들은 NULL값을 무시한다.
NULL값을 하나의 값으로 치환하기 위해서는 NVL함수를 사용하면 된다.
* 모든 자료형에 대하여 MAX와 MIN을 사용할 수 있다.
그러나 AVG, SUM, VARIANCE, STDDEV는 NUMBER만 사용 가능하다.
문제1> EMP 테이블에서 모든 SALESMAN에 대하여 급여의 평균, 최고액, 최저액, 합계를 출력하라.
SELECT AVG(sal), MAX(sal), MIN(sal)
FROM emp
WHERE job LIKE 'SAL%'
AVG(SAL) MAX(SAL) MIN(SAL)
--------- ---------- ----------
1400 1600 1250
문제2> EMP 테이블에 등록되어 있는 인원수, 보너스에 NULL이 아닌 인원수, 보너스의 평균,
등록되어 있는 부서의 수를 구하여 출력하라.
SELECT COUNT(*), COUNT(comm), AVG(NVL(comm, 0)), COUNT(DISTINCT deptno)
FROM emp
COUNT(*) COUNT(COMM) AVG(NVL(COMM,0)) COUNT(DISTINCTDEPTNO)
--------- ----------- ---------------- ---------------------
17 5 147.058824 3