과목 II SQL 기본 및 활용
제1장 SQL 기본
제7절 GROUP BY, HAVING 절
3. HAVING 절
[예제] K-리그 선수들의 포지션별 평균키를 구하는데, 평균키가 180 센티미터 이상인 정보만 표시하라는 요구 사항이 접수되었으므로 WHERE 절과 GROUP BY 절을 사용해 SQL 문장을 작성한다.
SELECT POSITION 포지션, ROUND(AVG(HEIGHT),2) 평균키 |
[실행결과]
메시지 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 |