'전체 글'에 해당되는 글 256건

  1. 2013.09.30 HAVING 절
  2. 2013.09.30 GROUP BY 절
  3. 2013.09.30 집계 함수(Aggregate Function)
  4. 2013.09.30 기타 NULL 관련 함수 (COALESCE)

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

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제7절 GROUP BY, HAVING 절

2. GROUP BY 절

 

 

[예제] K-리그 선수들의 포지션별 평균키는 어떻게 되는가란 요구 사항을 접수하였다. GROUP BY 절을 사용하지 않고 집계 함수를 사용했을 때 어떤 결과를 보이는지 포지션별 평균키를 구해본다.

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

 FROM PLAYER;

 

 

[실행결과]

메시지 8120, 수준 16, 상태 1, 줄 1
열 'PLAYER.POSITION'이(가) 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다.

 

 


 

 

[예제] SELECT 절에서 사용된 포지션이라는 한글 ALIAS를 GROUP BY 절의 기준으로 사용해본다.

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

 FROM PLAYER

 GROUP BY POSITION 포지션;

 

 

[실행결과]

메시지 102, 수준 15, 상태 1, 줄 1
';' 근처의 구문이 잘못되었습니다.

 

 


 

 

[예제] 포지션별 최대키, 최소키, 평균키를 출력한다. (포지션별이란 소그룹의 조건을 제시하였기 때문에 GROUP BY 절을 사용한다.)

 SELECT POSITION 포지션, COUNT(*) 인원수, COUNT(HEIGHT) 키대상,
             MAX(HEIGHT) 최대키, MIN(HEIGHT) 최소키, ROUND(AVG(HEIGHT),2) 평균키
 FROM PLAYER
 GROUP BY POSITION;

 

 

[실행결과]

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

(5개 행이 영향을 받음)

 

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

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

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제7절 GROUP BY, HAVING 절

1. 집계 함수(Aggregate Function)

 

 

[준비]

 UPDATE PLAYER SET HEIGHT = NULL WHERE HEIGHT = '0';

[SQL 전문가 가이드 실습용 파일]에 있는 스크립트에는 키(HEIGHT)가 0으로 입력되어있지만 책에서는 NULL로 설명되어있습니다.

선수들의 키 중에서 0 값을 모두 NULL로 바꿔줍니다.

 

 

[예제] 일반적으로 집계 함수는 GROUP BY 절과 같이 사용되지만 아래와 같이 테이블 전체가 하나의 그룹이 되는 경우에는 GROUP BY 절 없이 단독으로도 사용 가능하다.

 SELECT COUNT(*) "전체 행수", COUNT(HEIGHT) "키 건수",

              MAX(HEIGHT) 최대키, MIN(HEIGHT) 최소키, ROUND(AVG(HEIGHT),2) 평균키
 FROM PLAYER;

 

 

[실행결과]

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

(1개 행이 영향을 받음)

HEIGHT 칼럼의 데이터 형식은 정수 데이터를 사용하는 smallint 라서 소수점은 안나옵니다.

 

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

HAVING 절  (0) 2013.09.30
GROUP BY 절  (0) 2013.09.30
기타 NULL 관련 함수 (COALESCE)  (0) 2013.09.30
NULLIF  (0) 2013.09.30
NULL과 공집합  (0) 2013.09.30
Posted by G4.
,

 

과목 II SQL 기본 및 활용

제1장 SQL 기본

제6절 함수 (FUNCTION)

7. NULL 관련 함수

라. 기타 NULL 관련 함수 (COALESCE)

 

 

[준비]

 BEGIN TRAN;

 UPDATE EMP SET SAL = NULL WHERE ENAME = 'JONES';

 -- 예제 푼 후

 ROLLBACK;

만약 모든 인수가 NULL이라면 NULL을 리턴하는지 알아보기 위해 JONES 의 급여(SAL)을 NULL 값으로 바꿔줍니다.

바꾼 JONES 의 급여를 바꿔주기 위해 BEGIN TRAN 을 이용해 예제를 풀고 ROLLBACK 해줍니다.

 

 

[예제] 사원 테이블에서 커미션을 1차 선택값으로, 급여를 2차 선택값으로 선택하되 두 칼럼 모두 NULL인 경우는 NULL로 표시한다.

 SELECT ENAME, COMM, SAL, COALESCE(COMM, SAL) COAL
 FROM EMP;

 

 

[예제] COALESCE 함수는 두개의 중첩된 CASE 문장으로 표현할 수 있다.

 SELECT ENAME, COMM, SAL,
             CASE WHEN COMM IS NOT NULL
                       THEN COMM
                       ELSE (CASE WHEN SAL IS NOT NULL
                       THEN SAL
                       ELSE NULL
                       END)
             END COAL
 FROM EMP;

 

 

[실행결과]

(14개 행이 영향을 받음)

COALESCE 함수는 최초의 인수값을 반환해주고 인수가 모두 NULL 일 경우 NULL 을 리턴합니다.

[준비] 단계에서도 말했다시피 예제를 푼 후에 ROLLBACK 을 해서 JONES 의 급여를 원래대로 되돌립니다.

 

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

GROUP BY 절  (0) 2013.09.30
집계 함수(Aggregate Function)  (0) 2013.09.30
NULLIF  (0) 2013.09.30
NULL과 공집합  (0) 2013.09.30
NVL/ISNULL 함수  (2) 2013.09.30
Posted by G4.
,