1. GROUP BY문
- GROUP BY는 테이블에서 소규모 행을 그룹화하여 합계, 평균, 최댓값, 최솟값 등을 계산할 수 있음
- HAVING구에 조건문을 사용
- ORDER BY를 사용해서 정렬
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO;
- 위의 GROUP BY 예에서 SELECT DEPTNO, SAL FROM EMP를 실행
- DEPTNO로 그룹을 만들고, 그룹별 합계를 계산하라는 뜻
2. HAVING문 사용
3. 집계 함수 종류
집계 함수
COUNT()
SUM()
AVG()
MAX()와 MIN()
STDDEV()
VARIAN()
4. COUNT 함수
- COUNT() 함수는 행 수를 계산하는 함수
- COUNT(*)는 NULL값을 포함한 모든 행수를 계산
- COUNT(칼럼명)는 NULL값을 제외한 행 수를 계산
SELECT COUNT(*)
FROM EMP;
5. GROUP BY 사용 예제
1. 부서별(DEPTNO), 관리자별(MGR) 급여평균 계산
- 부서별, 관리자별 급여평균이므로 GROUP BY에 부서와 관리자를 추가한다
- 평균을 계산하기 위해서 SELECT문에 AVG 함수를 사용해야 함
SELECT DEPTNO, MGR, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, MGR;
- AVG(SAL) : 급여 평균을 계산한다.
- GROUP BY DEPTNO, MGR : 부서별, 관리자별 소그룹을 만든다.
2. 직업별(JOB) 급여합계 중에 급여(SAL)합계가 1000 이상인 직업
- 직업별 급여합계이므로 GROUP BY에 JOB을 포함시키고 급여합계가 1000 이상만 조회해야 하므로 HAVING 구에 조건을 넣어야 함
SELECT JOB, SUM(SAL)
FROM EMP
GROUP BY JOB
HAVING SUM(SAL) >= 1000;
- HAVING SUM(SAL) >= 1000 : 직업별 그룹합계 중에서 급여가 1000이상인 직업을 조회
3. 사원번호 1000 ~ 1003 번의 부서별 급여합계
- 사원번호 1000번에서 1003번까지 조회를 해야 하므로 WHERE문에 조건을 넣어야 함
- 그리고 부서별 합계이므로 GROUP BY에 DEPTNO를 사용
- SELECT문에 SUM 함수를 사용
SELECT DEPTNO, SUM(SAL) FROM EMP
WHERE EMPNO BETWEEN 1000 AND 1003
GROUP BY DEPTNO;
- WHERE EMPNO BETWEEN 1000 AND 1003 : 사원번호 별 조회 조건은 WHERE절에 넣어야 함