과목 II SQL 기본 및 활용

제1장 SQL 기본

제7절 GROUP BY, HAVING 절

5. 집계 함수와 NULL

 

 

[예제] 팀별 포지션별 FW, MF, DF, GK 포지션의 인원수와 팀별 전체 인원수를 구하는 SQL 문장을 작성한다. 데이터가 없는 경우는 0으로 표시한다.

 SELECT TEAM_ID,

              ISNULL(SUM(CASE WHEN POSITION = 'FW' THEN 1 END), 0) FW,

              ISNULL(SUM(CASE WHEN POSITION = 'MF' THEN 1 END), 0) MF,

              ISNULL(SUM(CASE WHEN POSITION = 'DF' THEN 1 END), 0) DF,

              ISNULL(SUM(CASE WHEN POSITION = 'GK' THEN 1 END), 0) GK,

              COUNT(*) SUM

 FROM PLAYER

 GROUP BY TEAM_ID;

 

 

[실행결과] 

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

(15개 행이 영향을 받음)

 


 

 

[예제] GROUP BY 절 없이 전체 선수들의 포지션별 평균 키 및 전체 평균 키를 출력할 수도 있다.

 SELECT ROUND(AVG(CASE WHEN POSITION = 'MF' THEN HEIGHT END),2) 미드필더,

              ROUND(AVG(CASE WHEN POSITION = 'FW' THEN HEIGHT END),2) 포워드,

              ROUND(AVG(CASE WHEN POSITION = 'DF' THEN HEIGHT END),2) 디펜더,

              ROUND(AVG(CASE WHEN POSITION = 'GK' THEN HEIGHT END),2) 골키퍼,

              ROUND(AVG(HEIGHT),2) 전체평균키

 FROM PLAYER;

 

 

[실행결과]

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

(1개 행이 영향을 받음)

 

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

SELECT 문장 실행 순서  (0) 2013.10.08
ORDER BY 정렬  (0) 2013.10.07
CASE 표현을 활용한 월별 데이터 집계  (0) 2013.10.01
HAVING 절  (0) 2013.09.30
GROUP BY 절  (0) 2013.09.30
Posted by G4.
,

 

과목 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.
,

 

<오류>

 

System.IO.FileNotFoundException: Could not load file or assembly 'ADODB, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 지정된 파일을 찾을 수 없습니다.

 

 

 

<원인>

C:\Windows\assembly 폴더에 ADODB가 전역캐시로 등록이 안되어있어서 오류가 발생합니다.

 

 

<해결>

gacutil.exe    ← 닷넷 전역 어셈블리 캐시 유틸리티

ADODB.dll     ← 등록 DLL 파일

1. 해당 파일들을 다운받고 커맨드창 실행

2. 다운 받은 파일이 있는 주소로 이동

   예) C드라이브 TEST폴더에 파일이 있다면 커맨드창에 cd C:\TEST 입력

3. gacutil -i adodb.dll 입력

4. Assembly successfully added to the cache 출력되면 성공

5. C:\Windows\assembly 폴더에 ADODB가 등록

 

 

'시스템' 카테고리의 다른 글

호환성 모드의 레지스트리 경로  (0) 2015.05.07
오류 (-5006 : 0x80070002)  (0) 2013.09.17
System.ComponentModel.Win32Exception  (0) 2013.08.30
Posted by G4.
,

 

<오류>

 

WMI공급자에 연결할 수 없습니다 . 권한이 없거나 서버에 연결할 수 없습니다. SQL Server 구성관리자에서는 SQL Server2005 서버만관리할 수 있습니다. 지정된 모듈을 찾을 수 없습니다. [0x8007007e]

 

 

Cannot connect to WMI provider. You do not have permission or the server is unreachable. Note that you can only manage SQL Server 2005 and later servers with SQL Server Configuration Manager.

The specified module could not be found. [0x8007007e]

 

 

 

<해결>

1. C:\WINDOWS\system32\wbem

2. framedyn.dll 파일 복사

3. C:\WINDOWS\system32

4. 붙여넣기

 

Posted by G4.
,