GROUP BY
- 특정한 컬럼의 테이터 들을 다른 데이터들과 비교해 유일한 값에 따라 무리를 짓습니다.
- GROUP BY절을 사용하여 한 테이블의 행들을 원하는 그룹으로 나눕니다.
- Column명을 GROUP함수와 SELECT절에 사용하고자 하는 경우 GROUP BY뒤에 Column명을 추가 합니다.
SQL>SELECT b.deptno, COUNT(a.empno)
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY b.deptno
DEPTNO COUNT(*)
------- ----------
10 3
20 5
30 6
부서별로 그룹을 지은 검색 결과 값이며 부서별로 사원수를 보여줍니다. |
☞ Group By 예제
scott/tiger유저로 접속해서 실행하세요..
예제1) 부서별로 그룹하여 부서번호, 인원수, 급여의 평균, 급여의 합을 구하여 출력 하여라.
SQL>SELECT deptno,COUNT(*),ROUND(AVG(sal)) "급여평균", ROUND(SUM(sal)) "급여합계"
FROM emp
GROUP BY deptno;
DEPTNO COUNT(*) 급여평균 급여합계
--------- ---------- ---------- ----------
10 3 2998 8995
20 5 2175 10875
30 6 1567 9400
예제2)업무별로 그룹하여 업무, 인원수, 평균 급여액, 최고 급여액, 최저 급여액 및 합계를 출력하라.
SQL>SELECT job, COUNT(empno) "인원수", AVG(sal) "평균급여액",
MAX(sal) "최고급여액", MIN(sal) "최저급여액", SUM(sal) "급여합계"
FROM emp
GROUP BY job
JOB 인원수 평균급여액 최고급여액 최저급여액 급여합계
--------- ---------- ---------- ---------- ---------- ----------
ANALYST 2 3000 3000 3000 6000
CLERK 4 1037.5 1300 800 4150
MANAGER 3 2840 2975 2695 8520
PRESIDENT 1 5000 5000 5000 5000
SALESMAN 4 1400 1600 1250 5600 |
GROUP BY의 HAVING 절
- WHERE절에 GROUP Function을 사용할 수 없습니다.
- HAVING절은 GRUOP 함수를 가지고 조건비교를 할 때 사용 합니다.
- WHERE → GRUOP BY → HAVING → ORDER BY순으로 쿼리문이 와야 됩니다.
HAVING절 예제
예제1) 사원수가 5명이 넘는 부서의 부서명과 사원수를 출력해라
SQL>SELECT b.dname, COUNT(a.empno)
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY dname
HAVING COUNT(a.empno) > 5
DNAME COUNT(A.EMPNO)
------------------------------- --------------
RESEARCH 6
SALES 6
예제2) 전체 월급이 5000을 초과하는 각 업무에 대해서 업무와 월급여 합계를 출력하여라.
단 판매원은 제외하고 월 급여 합계로 내림차순 정렬 하여라.
SQL>SELECT job, SUM(sal) "급여합계" -- 업무와 급여 합계를 출력
FROM emp
WHERE job NOT IN (’SALES’) -- 판매원은 제외
GROUP BY job -- 업무별로 Group By
HAVING SUM(sal) > 5000 -- 전체 월급이 5000을 초과하는
ORDER BY SUM(sal) DESC; -- 월급여 합계로 내림차순 정렬
JOB 급여합계
--------- ----------
MANAGER 8520
ANALYST 6000
SALESMAN 5600 |
================================================
* 데이터베이스 정보공유 커뮤니티 oracleclub.com
* 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
================================================
※ oracleclub 강좌를 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
※ oracleclub 강좌는 개인의 학습용으로만 사용 할 수 있습니다. 학원 홍보용이나 수익을 얻기 위한 용도로
사용을 하시면 안됩니다. ^^
[펌] http://www.oracleclub.com/lecture/1032