과목 II SQL 기본 및 활용

제1장 SQL 기본

제7절 GROUP BY, HAVING 절

4. CASE 표현을 활용한 월별 데이터 집계

 

 

STEP1. 개별 데이터 확인

 

[예제] 먼저 개별 입사정보에서 월별 데이터를 추출하는 작업을 진행한다. 이 단계는 월별 정보가 있다면 생략 가능하다.

 SELECT ENAME, DEPTNO, DATEPART(MONTH, HIREDATE) 입사월, SAL

 FROM EMP;

 SELECT ENAME, DEPTNO, MONTH(HIREDATE) 입사월, SAL

 FROM EMP;

 

 

[실행결과]

(14개 행이 영향을 받음)

 

 


 

 

STEP2. 월별 데이터 구분

 

[예제] 추출된 MONTH 데이터를 Simple Case Expression을 이용해서 12개의 월별 칼럼으로 구분한다. 실행 결과에서 보여 주는 ENAME 칼럼은 최종 리포트에서 요구되는 데이터는 아니지만, 정보의 흐름을 이해하기 위해 부가적으로 보여 주는 임시 정보이다. FROM 절에서 사용된 인라인 뷰는 2장 4절에서 설명한다.

 SELECT ENAME, DEPTNO,

 CASE MONTH(HIREDATE) WHEN 1 THEN SAL END M01,

 CASE MONTH(HIREDATE) WHEN 2 THEN SAL END M02,

 CASE MONTH(HIREDATE) WHEN 3 THEN SAL END M03,

 CASE MONTH(HIREDATE) WHEN 4 THEN SAL END M04,

 CASE MONTH(HIREDATE) WHEN 5 THEN SAL END M05,

 CASE MONTH(HIREDATE) WHEN 6 THEN SAL END M06,

 CASE MONTH(HIREDATE) WHEN 7 THEN SAL END M07,

 CASE MONTH(HIREDATE) WHEN 8 THEN SAL END M08,

 CASE MONTH(HIREDATE) WHEN 9 THEN SAL END M09,

 CASE MONTH(HIREDATE) WHEN 10 THEN SAL END M10,

 CASE MONTH(HIREDATE) WHEN 11 THEN SAL END M11,

 CASE MONTH(HIREDATE) WHEN 12 THEN SAL END M12

 FROM EMP;

책에서 FROM 절에 사용된 인라인 뷰는 예제를 푸는데 필요가 없기 때문에 삭제했습니다.

 

 

[실행결과] 

(14개 행이 영향을 받음)

 

 


 

 

STEP3. 부서별 데이터 집계

 

[예제] 최종적으로 보여주는 리포트는 부서별로 월별 입사자의 평균 급여를 알고 싶다는 요구사항이므로 부서별 평균값을 구하기 위해 GROUP BY 절과 AVG 집계 함수를 사용한다. 직원 개인에 대한 정보는 더 이상 필요 없으므로 제외한다. ORDER BY 절을 사용하지 않았기 때문에 부서번호별로 정렬이 되지는 않았다. 

 SELECT DEPTNO,

 AVG(CASE MONTH(HIREDATE) WHEN 1 THEN SAL END) M01,

 AVG(CASE MONTH(HIREDATE) WHEN 2 THEN SAL END) M02,

 AVG(CASE MONTH(HIREDATE) WHEN 3 THEN SAL END) M03,

 AVG(CASE MONTH(HIREDATE) WHEN 4 THEN SAL END) M04,

 AVG(CASE MONTH(HIREDATE) WHEN 5 THEN SAL END) M05,

 AVG(CASE MONTH(HIREDATE) WHEN 6 THEN SAL END) M06,

 AVG(CASE MONTH(HIREDATE) WHEN 7 THEN SAL END) M07,

 AVG(CASE MONTH(HIREDATE) WHEN 8 THEN SAL END) M08,

 AVG(CASE MONTH(HIREDATE) WHEN 9 THEN SAL END) M09,

 AVG(CASE MONTH(HIREDATE) WHEN 10 THEN SAL END) M10,

 AVG(CASE MONTH(HIREDATE) WHEN 11 THEN SAL END) M11,

 AVG(CASE MONTH(HIREDATE) WHEN 12 THEN SAL END) M12
 FROM EMP

 GROUP BY DEPTNO;

STEP2 예제와 마찬가지로 인라인 뷰는 삭제했습니다.

 

 

[실행결과]

경고: 집계 또는 다른 SET 작업에 의해 Null 값이 제거되었습니다.

(3개 행이 영향을 받음)

 

'SQL 전문가 가이드' 카테고리의 다른 글

ORDER BY 정렬  (0) 2013.10.07
집계 함수와 NULL  (0) 2013.10.01
HAVING 절  (0) 2013.09.30
GROUP BY 절  (0) 2013.09.30
집계 함수(Aggregate Function)  (0) 2013.09.30
Posted by G4.
,