HAVING 절

SQL 전문가 가이드 2013. 9. 30. 16:47

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제7절 GROUP BY, HAVING 절

3. HAVING 절

 

 

[예제] K-리그 선수들의 포지션별 평균키를 구하는데, 평균키가 180 센티미터 이상인 정보만 표시하라는 요구 사항이 접수되었으므로 WHERE 절과 GROUP BY 절을 사용해 SQL 문장을 작성한다.

 SELECT POSITION 포지션, ROUND(AVG(HEIGHT),2) 평균키
 FROM PLAYER
 WHERE AVG(HEIGHT) >= 180
 GROUP BY POSITION;

 

 

[실행결과]

메시지 147, 수준 15, 상태 1, 줄 1
집계가 HAVING 절이나 SELECT 목록에 포함된 하위 쿼리 내에 없으면 WHERE 절에 나타날 수 없습니다. 또한 집계 중인 열은 외부 참조입니다.

 

 


 

 

[예제] HAVING 조건절에는 GROUP BY 절에서 정의한 소그룹의 집계 함수를 이용한 조건을 표시할 수 있으므로, HAVING 절을 이용해 평균키가 180 센티미터 이상인 정보만 표시한다.

 SELECT POSITION 포지션, ROUND(AVG(HEIGHT),2) 평균키

 FROM PLAYER

 GROUP BY POSITION

 HAVING AVG(HEIGHT) >= 180;

 

 

[실행결과]

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

(2개 행이 영향을 받음)

 

 


 

 

[예제] SQL 문장은 GROUP BY 절과 HAVING 절의 순서를 바꾸어서 수행한다.

 SELECT POSITION 포지션, AVG(HEIGHT) 평균키

 FROM PLAYER

 HAVING AVG(HEIGHT) >= 180

 GROUP BY POSITION;

 

 

[실행결과]

메시지 156, 수준 15, 상태 1, 줄 1
키워드 'GROUP' 근처의 구문이 잘못되었습니다.

SQL Server 에서는 GROUP BY 절과 HAVING 절의 순서를 바꾸면 안됩니다.

 

 


 

 

[예제] K-리그의 선수들 중 삼성블루윙즈(K02)와 FC서울(K09)의 인원수는 얼마인가란 요구 사항이 접수되었다. WHERE 절과 GROUP BY 절을 사용한 SQL과 GROUP BY 절과 HAVING 절을 사용한 SQL을 모두 작성한다.

 SELECT TEAM_ID 팀ID, COUNT(*) 인원수

 FROM PLAYER

 WHERE TEAM_ID IN ('K09', 'K02')

 GROUP BY TEAM_ID;

 SELECT TEAM_ID 팀ID, COUNT(*) 인원수

 FROM PLAYER

 GROUP BY TEAM_ID

 HAVING TEAM_ID IN ('K09', 'K02');

 

 

[실행결과]

(2개 행이 영향을 받음)

 

 


 

 

[예제] 포지션별 평균키만 출력하는데, 최대키가 190cm 이상인 선수를 가지고 있는 포지션의 정보만 출력한다.

 SELECT POSITION 포지션, ROUND(AVG(HEIGHT),2) 평균키

 FROM PLAYER

 GROUP BY POSITION

 HAVING MAX(HEIGHT) >= 190;  

 

 

[실행결과]

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

(3개 행이 영향을 받음)

 

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

집계 함수와 NULL  (0) 2013.10.01
CASE 표현을 활용한 월별 데이터 집계  (0) 2013.10.01
GROUP BY 절  (0) 2013.09.30
집계 함수(Aggregate Function)  (0) 2013.09.30
기타 NULL 관련 함수 (COALESCE)  (0) 2013.09.30
Posted by G4.
,