[DB/기본] 그룹함수
그룹 함수 : 테이블 전체 행을 하나 이상의 컬럼을 기준으로 그룹화하여 그룹별로 결과를 출력하는 함수이다. (통계를 낼 때 주로 사용한다.)
1. 종류
종류 |
의미 |
사용 |
특징 |
AVG |
평균 |
AVG(컬럼) |
NULL 은 제외 |
COUNT |
개수 |
COUNT(컬럼 | *) |
COUNT(column) 또는 COUNT(*), NULL 은 제외 |
MAX |
최대값 |
MAX(컬럼) |
NULL 은 제외 |
MIN |
최소값 |
MIN(컬럼) |
NULL 은 제외 |
SUM |
합계 |
SUM(컬럼) |
NULL 은 제외 |
STDDEV |
표준편차 |
STDDEV(컬럼) |
NULL 은 제외 |
VARIANCE |
분산 |
VARIANCE(컬럼) |
NULL 은 제외 |
2. GROUP BY
1) 특징
- 특정 컬럼값을 기준으로 전체 레코드(ROW)를 서브 그룹으로 그룹화 한다.
- 통계를 낼 때 주로 사용한다.
- GROUP BY 절에 명시하지 않은 컬럼은 그룹함수와 함께 사용할 수 없다.
- 여러 컬럼을 사용하여 다중 그룹화를 할 수 있다.
2) 작성 규칙
- ALIAS는 사용할 수 없다.
- 그룹화 된 컬럼은 기본적으로 오름차순으로 출력된다.
- SELECT절에 나열된 컬럼은 GROUP BY 절에서 반드시 명시해야한다.
- GROUP BY 절에서 명시한 컬럼을 SELECT 절에서 사용하지 않아도 된다.
SELECT 컬럼1 COUNT(*) FROM 테이블_이름
GROUP BY 컬럼1;
3. ROLLUP
- GROUP BY 절의 컬럼을 기준으로 그룹화를 진행하고 각 그룹에 대해 부분합을 구한다.
--예제 : 소속 부서별로 직원 급여 합계와 모든 부서 직원들의 급여 합계를 출력.
SELECT deptno, SUM(sal) FROM DEPT
GROUP BY ROLLUP(deptno);
4. CUBE
- ROLLUP에 의한 그룹 결과와 GROUP BY 절 조건에 따라 그룹 조합을 만든다.
- 그룹화된 컬럼이 가질 수 있는 모든 경우의 수에 대해서 소계(SUBTOTAL), 총계(GRAND TOTAL)을 출력한다.
--예제 : 학과 및 직급별 교수 수, 학과별 교수 수, 직급별 교수 수, 전체 교수 수를 출력하여라.
SELECT deptno, position, COUNT(*)
FROM professor
GROUP BY CUBE(deptno, position);
5. HAVING
- GROUP BY 절에 의해 생성된 그룹에 조건을 지정한다.
- HAVING 절 : 이미 그룹화 된 결과를 대상으로 조건을 지정한다.
- WHERE 절 : 그룹화 전에 먼저 조건을 지정한다.
* GROUP BY전에 불필요한 레코드를 미리 제외할 수 있기 때문에 WHERE 절을 사용하는 것이 더 효율적이다.
SELECT 컬럼, 그룹함수(컬럼)
FROM 테이블_이름
WHERE 조건식
GROUP BY 컬럼
HAVING 그룹 조건식;
6. GROUPING SETS
- GROUP BY 절에 여러개의 그룹 조건을 작성할 수 있다.
- GROUPING SETS 함수의 결과는 각 그룹 조건에 대해 별도로 GROUP BY한 결과를 UNION ALL한 결과와 동일하다.
SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY GROUPING SETS(deptno,job);
7. GROUPING
- ROLLUP,CUBE,GROUPING SETS 가 사용되면 GROUPING(표현식) =1, 사용되지 않으면 GROUPING(표현식) =0 으로 출력된다.
SELECT DNAME
, GROUPING(DNAME)
, JOB
, GROUPING(JOB)
, COUNT(*)
, SUM(SAL)
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY ROLLUP( DNAME, JOB )
ORDER BY DNAME, JOB;