-- 부서별 사원수 조회 SELECT '2005년' year, deptno 부서번호, COUNT(*) 사원수 FROM emp GROUP BY deptno ORDER BY COUNT(*) DESC; YEAR 부서번호 사원수 ------ ---------- ---------- 2005년 30 6 2005년 20 5 2005년 10 3
아래 예제는 부서별로 그룹하여 부서번호, 인원수, 급여의 평균, 급여의 합을 조회하는 예제이다.
SELECT deptno, COUNT(*), ROUND(AVG(sal)) "급여평균", ROUND(SUM(sal)) "급여합계" FROM emp GROUP BY deptno; DEPTNO COUNT(*) 급여평균 급여합계 -------- ---------- ---------- ---------- 30 6 1567 9400 20 5 2175 10875 10 3 2917 8750
아래 예제는 업무별로 그룹하여 업무, 인원수, 평균 급여액, 최고 급여액, 최저 급여액 및 합계를 조회하는 예제이다.
SELECT job, COUNT(empno) "인원수", AVG(sal) "평균급여액", MAX(sal) "최고급여액", MIN(sal) "최저급여액", SUM(sal) "급여합계" FROM emp GROUP BY job; JOB 인원수 평균급여액 최고급여액 최저급여액 급여합계 ----------- -------- ---------- ---------- ---------- ---------- CLERK 4 1037.5 1300 800 4150 SALESMAN 4 1400 1600 1250 5600 PRESIDENT 1 5000 5000 5000 5000 MANAGER 3 2758.33333 2975 2450 8275 ANALYST 2 3000 3000 3000 6000
-- GROUP BY를 이용한 부서번호 조회 예 SELECT deptno FROM emp GROUP BY deptno; DEPTNO ------ 30 20 10
아래의 예제는 동일한 결과를 반환한다.
-- DISTINCT를 사용한 중복 데이터 제거 SELECT DISTINCT deptno FROM emp; -- GROUP BY를 사용한 중복 데이터 제거 SELECT deptno FROM emp GROUP BY deptno; DEPTNO ------ 30 20 10
하지만 곰곰히 생각해 보면 GROUP BY와 DISTINCT는 각자 고유의 기능이 있다
집계함수를 사용하여 특정 그룹으로 구분 할 때는GROUP BY 절을 사용하며, 특정 그룹 구분없이 중복된 데이터를 제거할 경우에는 DISTINCT 절을 사용 하도록 하자
-- 아래와 같은 기능은 DISTINCT를 사용하는 것이 훨씬 효율적이다. SELECT COUNT(DISTINCT d.deptno) "중복제거 수", COUNT(d.deptno) "전체 수" FROM emp e, dept d WHERE e.deptno = d.deptno; -- 집계 함수가 필요한 경우는 GROUP BY를 사용해야 한다. SELECT deptno, MIN(sal) FROM emp GROUP BY deptno;
아래 예제는 사원수가 다섯 명이 넘는 부서와 사원수를 조회하는 예제이다.
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 사원수 ------------ ------- SALES 6
아래 예제는 전체 월급이 5000을 초과하는 JOB에 대해서 JOB과 월급여 합계를 조회하는 예이다. 단 판매원(SALES)은 제외하고 월 급여 합계로 내림차순 정렬하였다.
SELECT job, SUM(sal) "급여합계" FROM emp WHERE job != 'SALES' -- 판매원은 제외 GROUP BY job -- 업무별로 Group By HAVING SUM(sal) > 5000 -- 전체 월급이 5000을 초과하는 ORDER BY SUM(sal) DESC; -- 월급여 합계로 내림차순 정렬 JOB 급여합계 ------------------ ---------- MANAGER 8275 ANALYST 6000 SALESMAN 5600
- 강좌 URL : http://www.gurubee.net/lecture/1032
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.