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

'프로그램 > DB' 카테고리의 다른 글

[오라클] - SIGN()함수  (0) 2009.04.01
[펌] - ROLLUP operator  (0) 2009.03.27
단일 테이블에 다중 행 입력 방법  (0) 2009.03.16
오라클 시퀀스 생성하기  (0) 2009.03.16
[TOAD] 토드에서 쿼리문 자동정렬하기  (0) 2009.02.03

+ Recent posts