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 BYb.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;
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 HAVINGCOUNT(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; -- 월급여 합계로 내림차순 정렬
================================================
* 데이터베이스 정보공유 커뮤니티 oracleclub.com
* 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
================================================
※ oracleclub 강좌를 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
※ oracleclub 강좌는 개인의 학습용으로만 사용 할 수 있습니다. 학원 홍보용이나 수익을 얻기 위한 용도로
사용을 하시면 안됩니다. ^^